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