Почему не работает функция gets? - C (СИ)
Формулировка задачи:
Почему не работает функция gets?
Visual Studio
// ConsoleApplication6.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <stdio.h> #include <conio.h> int OnlyNumber(char*); /* прототип функции */ void main() { char s[80]=""; /* буфер строки */ int Num; /* */ char c; /* ответ, на вопрос о продолжении работы */ do { printf("\nВведите исходную строку: "); gets(s); Num = OnlyNumber(s); printf("Количество слов,состоящих только из цифр: %d", Num); printf("\nПродолжить ? (Y/N)[Y]:"); } while (!((c = getch()) == 'N' || c == 'n')); }/* main */ int OnlyNumber(char* s) { char *ss; int count = 0, d = 0; for (ss = s; *ss != '\0'; ss++) if (*ss >= 48 && *ss <= 57) count++; else if (*ss == ' ' && count != 0) { d++; count = 0; } else count = 0; return(d); }/* OnlyNumber */
Решение задачи: «Почему не работает функция gets?»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <ctype.h> int OnlyNumber(char*); /* прототип функции */ void clean_stream(); int main(int argc, char *argv[]) { char s[80]; /* буфер строки */ int Num; /* */ char c; /* ответ, на вопрос о продолжении работы */ do { printf("\nВведите исходную строку: "); gets(s); Num = OnlyNumber(s); printf("Количество слов,состоящих только из цифр: %d", Num); printf("\nПродолжить ? (Y/N)[Y]: "); c = getchar(); clean_stream(); } while (c != 'N' && c != 'n'); return 0; }/* main */ void clean_stream() { while(fgetc(stdin) != '\n'); } int OnlyNumber(char *s) { int fwnum = 0; int first = 1; int cwnum = 0; int len = strlen(s); for(int i = 0; i <= len; ++i) { if(isalnum(s[i])) { if(first) { first = 0; if(isdigit(s[i])) { fwnum = 1; } } if(isalpha(s[i])) { if(fwnum) { fwnum = 0; } } } else if(isspace(s[i]) || s[i] == '\n' || s[i] == '\0') { if(fwnum) { ++cwnum; fwnum = 0; } first = 1; } } return cwnum; }/* OnlyNumber */
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
- #include
для работы с функциями ввода-вывода - #include
для работы со строками - #include
для работы с преобразованием символов
- #include
- Прототип функции:
- *int OnlyNumber(char);** функция, которая принимает указатель на строку и возвращает количество слов, состоящих только из цифр
- Основная функция программы:
- *int main(int argc, char argv[])**
- Объявлена переменная char s[80], которая будет использоваться как буфер для ввода строки
- Объявлена переменная int Num, которая будет использоваться для хранения количества слов, состоящих только из цифр
- Объявлена переменная char c, которая будет использоваться для хранения ответа на вопрос о продолжении работы
- Используется цикл do-while для повторения ввода и обработки строки до тех пор, пока пользователь не введет 'N' или 'n'
- Внутри цикла происходит вывод сообщения с просьбой ввести исходную строку
- Функция gets(s) используется для считывания строки из стандартного ввода
- Результат работы функции OnlyNumber(s) выводится на экран
- Происходит считывание символа ответа с помощью функции getchar()
- Используется функция clean_stream() для очистки буфера ввода
- Функция clean_stream():
- Очищает буфер ввода, считывая символы до новой строки
- *Функция OnlyNumber(char)**:
- Переменная fwnum инициализируется значением 0 и используется для подсчета слов, начинающихся с цифры
- Переменная first инициализируется значением 1 и используется для определения первого слова в строке
- Переменная cwnum инициализируется значением 0 и используется для подсчета слов, состоящих только из цифр
- Происходит проход по каждому символу входной строки
- Если символ является буквой или цифрой, то проверяется, является ли он первым символом в слове
- Если символ является пробелом, переносом строки или концом строки, то проверяется, является ли текущее слово словом, состоящим только из цифр
- Возвращается количество слов, состоящих только из цифр
- В конце программы возвращается значение 0, что означает успешное завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д