Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #define N 80
  6. #define M 6
  7. int main (void)
  8. {
  9. int i=0, m=0, j=0, k=0, n=N, b=0, f=0;
  10. char st[M][N], a[]={"Intput number of arrays "},q='y', st2[M][N]={"tat"};
  11. char l;
  12. while (q=='y')
  13. {
  14. puts(a);
  15. scanf("%d", &m);
  16. if (m<M)q='n';
  17. else
  18. printf("\nIncorrect number, please repeat input process \n");
  19. };
  20. printf("Enter simbol\n");
  21. scanf("%c", &l); \\тут scanf отказывается запускаться.
  22. printf("\nInput page \n");
  23. for(j=0;j<m;j++)
  24. for(i=0;i<n && q!='\r' &&q!='\n';i++)
  25. scanf("%c", &q);st[j][i]=q;
  26. if(q==l)k++;
  27. if(q=='_')
  28. if(k==2) {for(b=0;b<=i;b++) {st2[j][f]=st[j][b];st[f][f+1]=' ';};f+=2;}
  29. n-=i;
  30. i=0;
  31. k=0;
  32. for (j=0;j<m;j++)
  33. for (i=0;i<n;i++)
  34. printf("%c", st2[j][i]);
  35. getch();
  36. return 0;
  37. }
отказывается запускаться....запарился проверять. задача состоит в том, чтобы из вводимых строк найти слова, у которых заданный символ встречается дважды и вывести эти слова.

Решение задачи: «Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.    
  4. #define MATCHES_NEEDED 2
  5.    
  6. int matches_count(const char * s, char ch){
  7.     int cnt;
  8.     char * found;
  9.    
  10.     for ( cnt = 0, found = strchr(s, ch); found; ++cnt, found = strchr(++found, ch) )
  11.         ;
  12.        
  13.     return cnt;
  14. }
  15.  
  16. int main(void){
  17.     char ch, buf[BUFSIZ], *p, *f;
  18.    
  19.     printf("String: ");
  20.     if ( scanf("%[^\n]%*c", buf) != 1 ){
  21.         fprintf(stderr, "Wrong input!\n");
  22.         return 1;
  23.     }
  24.     printf("Character: ");
  25.     if ( scanf("%c", &ch) != 1 ){
  26.         fprintf(stderr, "Wrong input!\n");
  27.         return 1;
  28.     }
  29.    
  30.     for ( p = strtok(buf, " \t\n"); p; p = strtok(NULL, " \t\n") )
  31.         if ( matches_count(p, ch) == MATCHES_NEEDED )
  32.             printf("%s\n", p);
  33.  
  34.     return 0;
  35. }

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы