Как очистить поток ввода посредством 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)));
- }
Объяснение кода листинга программы
- Сначала мы объявляем переменную типа char с именем text и выделяем для неё память в динамической области памяти с помощью функции malloc. Значение этой переменной равно 0.
- Затем мы объявляем переменную i типа int и инициализируем её значением 0. Эта переменная используется для отслеживания количества символов, которые мы уже прочитали.
- Далее мы используем функцию printf для вывода сообщения с просьбой ввести текст.
- Мы используем цикл while для чтения символов из стандартного ввода до тех пор, пока не достигнем конца файла (EOF) или не прочитаем 14 гласных букв.
- Внутри цикла while мы используем вложенный цикл for для проверки каждого из 14 гласных символов в массиве glasnie. Если текущий символ является гласной, мы увеличиваем значение переменной vowels на 1.
- После каждой итерации внешнего цикла мы увеличиваем значение переменной i на 1 и с помощью функции realloc увеличиваем размер массива text на 1, чтобы иметь возможность хранить следующий символ.
- По завершении цикла while мы не делаем ничего с переменной text, поэтому она остается неизменной. Значение переменной i будет равно количеству прочитанных символов. Значение переменной vowels будет равно количеству прочитанных гласных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д