Как очистить поток ввода посредством fflush? - C (СИ)

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

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

Проблема вот в чём: в тексте, который я вывожу на этой строчке
    printf("Введённый вами текст:%s", text);
после последнего символа идёт большое количество больших букв Н, и не только... Как я понимаю, мне нужно очистить поток с помощью команды
fflush(stdin)
Но как я не пытался, сделать у меня это не получается. Подскажите, куда "впихнуть" эту функцию?
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h" 
#include "stdio.h" 
#include "windows.h" 
#include "iomanip" 
#include "string.h"
#define D " .,!?\n"
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Установка русского языка 
 
    FILE *from_file, *in_file; //Указатели для файлов
 
    printf("Открытие файла для вывода текста:");        //Открытие 
    fopen_s(&in_file, "D:\\Kursovaia\\Vivod.txt", "w"); //файла для вывод текста
    if (in_file == NULL) printf("ошибка\n");            //и
    else printf("выполнено\n");                         //проверка
 
    printf("Открытие файла с символами-разделителями:");                //Открытие
    fopen_s(&from_file, "D:\\Kursovaia\\Delimiters.txt", "r");          //файла с символами-разделителями
    if (from_file == NULL) printf("ошибка\n");                          //и 
    else printf("выполнено\n");                                         //проверка
 
    char glasnie[13] = "aeiouyAEIOUY"; //Введём массив гласных и 
    int vowels = 0;                    //обнулим их начальное количество в тексте
 
    char *delimiters;                              //Введём массив разделителей из файла
    delimiters = (char*)malloc(5 * sizeof(char)); //и
    fgets(delimiters, 5, from_file);               //выделим под него память
 
    int uslovie;
    printf("Введите количество гласных:"); //Условие остановки ввода текста
    scanf_s("%d", &uslovie);
 
    int preobrazovanie;
    printf("Введите количество букв, длиннее которого вы не хотите видеть слова в тексте:"); //Условие преобразования текста
    scanf_s("%d", &preobrazovanie);
 
    int f = 0;
    char *lol;
    char *str;
    char *text;
    text = (char*)malloc(sizeof(char));       //Введём текст,       
    int i = 0;                                //соблюдая
    printf("Введите текст:\n");               //условие
    while (vowels < uslovie && (text[i] = getchar()) != EOF)
    {
        for (int m = 0; m < 14; m++)
        {
            if (text[i] == glasnie[m])
            {
                vowels++;
            }
        }
        i++;
        text = (char*)realloc(text, (strlen(text) + 1)*sizeof(char));
    }
    printf("Введённый вами текст:%s", text);
    lol = strtok_s(text, D, &str);
    while (lol)
    {
        if (strlen(lol) <= preobrazovanie)
        {
            fprintf(in_file, "%s ", lol);
        }
        lol = strtok_s(NULL, D, &str);
    }
    fclose(in_file);                                   //Закроем файлы
    printf("Файл для вывода текста закрыт\n");         //для вывода текста
    fclose(from_file);                                 //и
    printf("Файл с символами-разделителями закрыт\n"); //с символами-разделителями
 
    free(delimiters);   //Правила
    free(text);         //хорошего
    system("pause");    //тона
    return 0;
}

Решение задачи: «Как очистить поток ввода посредством fflush?»

textual
Листинг программы
text = (char*)malloc(1000*sizeof(char));       //Введём текст,      
    int i = 0;                                //соблюдая
    printf("Введите текст:\n");               //условие
    while (vowels < uslovie && (text[i] = getchar()) != EOF)
    {
        for (int m = 0; m < 14; m++)
        {
            if (text[i] == glasnie[m])
            {
                vowels++;
            }
        }
        i++;
        text = (char*)realloc(text, ((i+1)*sizeof(char)));
    }

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

  1. Сначала мы объявляем переменную типа char с именем text и выделяем для неё память в динамической области памяти с помощью функции malloc. Значение этой переменной равно 0.
  2. Затем мы объявляем переменную i типа int и инициализируем её значением 0. Эта переменная используется для отслеживания количества символов, которые мы уже прочитали.
  3. Далее мы используем функцию printf для вывода сообщения с просьбой ввести текст.
  4. Мы используем цикл while для чтения символов из стандартного ввода до тех пор, пока не достигнем конца файла (EOF) или не прочитаем 14 гласных букв.
  5. Внутри цикла while мы используем вложенный цикл for для проверки каждого из 14 гласных символов в массиве glasnie. Если текущий символ является гласной, мы увеличиваем значение переменной vowels на 1.
  6. После каждой итерации внешнего цикла мы увеличиваем значение переменной i на 1 и с помощью функции realloc увеличиваем размер массива text на 1, чтобы иметь возможность хранить следующий символ.
  7. По завершении цикла while мы не делаем ничего с переменной text, поэтому она остается неизменной. Значение переменной i будет равно количеству прочитанных символов. Значение переменной vowels будет равно количеству прочитанных гласных.

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


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

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

9   голосов , оценка 4.111 из 5
Похожие ответы