Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется константа MATCHES_NEEDED, которая задает количество совпадений, необходимых для вывода строки
  3. Создается функция matches_count, которая считает количество совпадений заданного символа в строке
  4. В функции main считываются две строки: строка из стандартного ввода и символ для поиска
  5. Если ввод некорректен, выводится сообщение об ошибке и функция завершается с кодом 1
  6. Строка разделяется на слова с помощью функции strtok
  7. Проверяется, есть ли в каждом слове заданный символ и если да, то выводится это слово
  8. Функция main завершается с кодом 0

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы