Как очистить поток ввода посредством 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 будет равно количеству прочитанных гласных.