Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#define N 80
#define M 6
int main (void)
{
int i=0, m=0, j=0, k=0, n=N, b=0, f=0;
char st[M][N], a[]={"Intput number of arrays "},q='y', st2[M][N]={"tat"};
char l;
while (q=='y')
{
puts(a);
scanf("%d", &m);
if (m<M)q='n';
else
printf("\nIncorrect number, please repeat input process \n");
};
printf("Enter simbol\n");
scanf("%c", &l); \\тут scanf отказывается запускаться.
printf("\nInput page \n");
for(j=0;j<m;j++)
for(i=0;i<n && q!='\r' &&q!='\n';i++)
scanf("%c", &q);st[j][i]=q;
if(q==l)k++;
if(q=='_')
if(k==2) {for(b=0;b<=i;b++) {st2[j][f]=st[j][b];st[f][f+1]=' ';};f+=2;}
n-=i;
i=0;
k=0;
for (j=0;j<m;j++)
for (i=0;i<n;i++)
printf("%c", st2[j][i]);
getch();
return 0;
}Решение задачи: «Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define MATCHES_NEEDED 2
int matches_count(const char * s, char ch){
int cnt;
char * found;
for ( cnt = 0, found = strchr(s, ch); found; ++cnt, found = strchr(++found, ch) )
;
return cnt;
}
int main(void){
char ch, buf[BUFSIZ], *p, *f;
printf("String: ");
if ( scanf("%[^\n]%*c", buf) != 1 ){
fprintf(stderr, "Wrong input!\n");
return 1;
}
printf("Character: ");
if ( scanf("%c", &ch) != 1 ){
fprintf(stderr, "Wrong input!\n");
return 1;
}
for ( p = strtok(buf, " \t\n"); p; p = strtok(NULL, " \t\n") )
if ( matches_count(p, ch) == MATCHES_NEEDED )
printf("%s\n", p);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется константа MATCHES_NEEDED, которая задает количество совпадений, необходимых для вывода строки
- Создается функция matches_count, которая считает количество совпадений заданного символа в строке
- В функции main считываются две строки: строка из стандартного ввода и символ для поиска
- Если ввод некорректен, выводится сообщение об ошибке и функция завершается с кодом 1
- Строка разделяется на слова с помощью функции strtok
- Проверяется, есть ли в каждом слове заданный символ и если да, то выводится это слово
- Функция main завершается с кодом 0