Почему не работает функция 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, что означает успешное завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д