Почему не работает функция 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 */

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

  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
Похожие ответы