Почему не работает функция gets? - C (СИ)

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

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

Почему не работает функция gets? Visual Studio
Листинг программы
  1. // ConsoleApplication6.cpp: определяет точку входа для консольного приложения.
  2. //
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <conio.h>
  6. int OnlyNumber(char*); /* прототип функции */
  7. void main()
  8. { char s[80]=""; /* буфер строки */
  9. int Num; /* */
  10. char c; /* ответ, на вопрос о продолжении работы */
  11. do
  12. {
  13. printf("\nВведите исходную строку: ");
  14. gets(s);
  15. Num = OnlyNumber(s);
  16. printf("Количество слов,состоящих только из цифр: %d", Num);
  17. printf("\nПродолжить ? (Y/N)[Y]:");
  18. }
  19. while (!((c = getch()) == 'N' || c == 'n'));
  20. }/* main */
  21. int OnlyNumber(char* s)
  22. {
  23. char *ss;
  24. int count = 0, d = 0;
  25. for (ss = s; *ss != '\0'; ss++)
  26. if (*ss >= 48 && *ss <= 57) count++;
  27. else
  28. if (*ss == ' ' && count != 0)
  29. {
  30. d++;
  31. count = 0;
  32. }
  33. else count = 0;
  34. return(d);
  35. }/* OnlyNumber */

Решение задачи: «Почему не работает функция gets?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4.  
  5. int OnlyNumber(char*); /* прототип функции */
  6. void clean_stream();
  7.  
  8. int main(int argc, char *argv[]) {
  9.     char s[80]; /* буфер строки */
  10.     int Num; /*  */
  11.     char c; /* ответ, на вопрос о продолжении работы */
  12.    
  13.     do {
  14.         printf("\nВведите исходную строку: ");
  15.         gets(s);
  16.        
  17.         Num = OnlyNumber(s);
  18.         printf("Количество слов,состоящих только из цифр: %d", Num);
  19.        
  20.         printf("\nПродолжить ? (Y/N)[Y]: ");
  21.         c = getchar();
  22.         clean_stream();
  23.     } while (c != 'N' && c != 'n');
  24.    
  25.     return 0;
  26. }/* main */
  27.  
  28. void clean_stream() {
  29.     while(fgetc(stdin) != '\n');
  30. }
  31.  
  32. int OnlyNumber(char *s) {
  33.     int fwnum = 0;
  34.     int first = 1;
  35.     int cwnum = 0;
  36.    
  37.     int len = strlen(s);
  38.     for(int i = 0; i <= len; ++i) {
  39.         if(isalnum(s[i])) {
  40.             if(first) {
  41.                 first = 0;
  42.                 if(isdigit(s[i])) {
  43.                     fwnum = 1;
  44.                 }
  45.             }
  46.            
  47.             if(isalpha(s[i])) {
  48.                 if(fwnum) {
  49.                     fwnum = 0;
  50.                 }
  51.             }
  52.         } else if(isspace(s[i]) || s[i] == '\n' || s[i] == '\0') {
  53.             if(fwnum) {
  54.                 ++cwnum;
  55.                 fwnum = 0;
  56.             }
  57.                
  58.             first = 1;
  59.         }
  60.     }
  61.    
  62.     return cwnum;
  63. }/* OnlyNumber */

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

  1. Включаем необходимые заголовочные файлы:
    • #include для работы с функциями ввода-вывода
    • #include для работы со строками
    • #include для работы с преобразованием символов
  2. Прототип функции:
    • *int OnlyNumber(char);** функция, которая принимает указатель на строку и возвращает количество слов, состоящих только из цифр
  3. Основная функция программы:
    • *int main(int argc, char argv[])**
    • Объявлена переменная char s[80], которая будет использоваться как буфер для ввода строки
    • Объявлена переменная int Num, которая будет использоваться для хранения количества слов, состоящих только из цифр
    • Объявлена переменная char c, которая будет использоваться для хранения ответа на вопрос о продолжении работы
    • Используется цикл do-while для повторения ввода и обработки строки до тех пор, пока пользователь не введет 'N' или 'n'
      • Внутри цикла происходит вывод сообщения с просьбой ввести исходную строку
      • Функция gets(s) используется для считывания строки из стандартного ввода
      • Результат работы функции OnlyNumber(s) выводится на экран
      • Происходит считывание символа ответа с помощью функции getchar()
      • Используется функция clean_stream() для очистки буфера ввода
  4. Функция clean_stream():
    • Очищает буфер ввода, считывая символы до новой строки
  5. *Функция OnlyNumber(char)**:
    • Переменная fwnum инициализируется значением 0 и используется для подсчета слов, начинающихся с цифры
    • Переменная first инициализируется значением 1 и используется для определения первого слова в строке
    • Переменная cwnum инициализируется значением 0 и используется для подсчета слов, состоящих только из цифр
    • Происходит проход по каждому символу входной строки
    • Если символ является буквой или цифрой, то проверяется, является ли он первым символом в слове
    • Если символ является пробелом, переносом строки или концом строки, то проверяется, является ли текущее слово словом, состоящим только из цифр
    • Возвращается количество слов, состоящих только из цифр
  6. В конце программы возвращается значение 0, что означает успешное завершение работы программы

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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