Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/43: Рейтинг темы: голосов - 43, средняя оценка - 4.72
 Аватар для warobushek
2 / 2 / 1
Регистрация: 08.03.2008
Сообщений: 82

Опять про fflush, уже stdout

31.08.2008, 05:46. Показов 8905. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые профессионалы. В книге Хэзфилд, Кирби " Искусство программирования на языке Си. Фундаментальные алгоритмы.... " на 58 стр. увидел текст ниже. Скажите, кто прав? Он или авторы следующих ресурсов : http://c-faq.com/stdio/stdinflush.html http://c-faq.com/stdio/stdinflush2.html .
Подавление буферов ввода
Ниже демонстроруется обычно применяемая методика освобождения от нежелательных символов во входном потоке:
Code
1
2
3
4
5
printf("Введите возраст");
scanf("%d", &age);     /*получение возраста*/ 
printf("Введите размер обуви:");
fflush(stdin);
scanf("%d", &shoesize);
Почитаем, что стандарт говорит об этом фрагменте:
Code
1
2
#include <stdio.h>
int fflush(FILE* stream);
Из раздела 7.19.5.2: "[#2] Если stream указывает на выходной поток
или на модификацию потока, в котором последняя не было операцией ввода,
функция fflush удаляет любые непечатаемые данные, для которых поток доставлен
в хост-среду для записи в файл; в противном случае поведение неопределено".


Если вы хотите избавиться от случайных символов между обращениями к scanf, можете сделать это следующим образом:
Code
1
2
3
4
5
6
 printf("Введите возраст:");
fflush(stdout);
scanf("%d",&age);
printf("Введите размер обуви:");
fflush(stdout);
scanf(" %d", &shoesize); [color=red] /*обратите внимание на лидирующий пробел*/ [/color]
(Как вы видите, я принял возможность продемонстрировать, что вы можете переносимо собрать ввод на той же строке, что и предыдущий вывод, разумно используя функцию fflush() )
Скажите, кто прав? Что дает этот "волшебный" пробел в его примере?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2008, 05:46
Ответы с готовыми решениями:

Stdout записать в буфер и затем в stdout
Привет, подскажите начинающему как записать страницу загруженную с помощью curl в буфер а затем вывести её в терминал (хорошо бы ещё в...

Опять про ПР... :/
Вот у меня опять назрел вопрос, который пытаюсь уже давно выяснить... Для примера возьмем сайт на WP (все, думаю, знают, что это) ...

опять про ПР
Если у меня 1 страничный сайт и с index.php идут 12 локальных линков на форум, фурум я не яндексирую. Хочу удержать PR на морде, как мне...

9
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
31.08.2008, 10:58
Можно, вообще, узнать, что это за методика? В чем отличие, если я не скажу fflush?
0
 Аватар для ABTOP
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
31.08.2008, 13:56
Я не видел что бы где нибудь в теории или MSDN было наприсанно про этот "волшебный" пробел в разных вводах, как я понимаю он служит разделителем... дело в том что

Code
1
scanf("%d%d", &a, &b);
редко, но возникают ошибки ввода... вот почему используют пробел...

Code
1
scanf("%d %d", &a, &b);
он являеться знаком знаком по которому компилятор разделяет вводимые значения... и видимо поклонники этого пробела решили перенести его при вводе в несколько строк... Один придумал и все пользуються... так что оба варианта правильны и надёжны... а fflush() тоже не надо, это просто, сново таки, один из обьектов осторожности...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
31.08.2008, 14:45
Вот я не понял насчет того, что fflush удаляет какие-то там символы. Это fpurge делает...
0
 Аватар для warobushek
2 / 2 / 1
Регистрация: 08.03.2008
Сообщений: 82
31.08.2008, 16:04  [ТС]
fpurge на любой платформе есть?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
31.08.2008, 16:07
Нет. На фряхе. На линухе - __fpurge. На винде не в курсе...
0
 Аватар для ABTOP
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
31.08.2008, 19:51
fpurge() - Освобождает канал, не закрывая файла, и освобождает память,
занятую под дескриптор. Если файл был открыт на вывод, он теряется.

Если поток stream связан с файлом, открытым для записи, то при обращении к функции fflush() в этот файл будет физически записано содержимое выходного буфера. При этом файл остается открытым. Нулевое значение, возвращаемое функцией, свидетельствует о ее успешном выполнении, а значение EOF — о возникновении ошибки при записи.

разницы практически нет... Просто сведения про fpurge(), я нашол в книге по С++,а fflush() по С... может разныца в этом
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
31.08.2008, 22:46
Это как это теряется? Кто теряется? Магия какая-то. Фигасе разницы нет!
Одна функция очищает буфера, которые еще не успели записаться. То есть данные незаписанные пропадают.
Другая наоборот форсирует запись.
Они, фактически, противоположны друг другу.

P. S. Вопрос-то в том, как это все связать с тем, что в начале темы. Для чего там флашат стрим...что эта функция должна удалять...
0
 Аватар для ABTOP
36 / 36 / 4
Регистрация: 09.06.2008
Сообщений: 324
01.09.2008, 19:38
я думаю что fflush() очишает что-то от предыдущего scanf()... А что именно хз... И насчёт теряеться... теория списанна с учебника...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.09.2008, 13:53
Эм, он ничего не очищает. просто последующий scanf захватит данные, которые через пробел идут. Причем, захватит он и со scanf и без него...

P. S. Да я верю. Просто я на практике применял еще. Я не понял, что там теряется, просто С дескриптором файла ничего не происходит. Только с данными.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2008, 13:53
Помогаю со студенческими работами здесь

Опять же про сапу
Ув сео. Я купила на сапе примарно 150 тематических сылок, с ключевыми словами новости, и новости сми. Эти сылки уже проиндексировались, и...

Опять про таймеры
Пытаюсь запустить таймер в режиме fast pwm 14, так, чтобы при сравнении счетного регистра с OCR1A и OCR1B выводы OC1A и OC1B...

Опять про массивы
Всем привет. Подружка попросила помочь ее сыну решить пару лабораторных по информатике на vba, из 6 задач с четырьмя справилась, а вот...

опять про MenuStrip
Уважаемые знатоки, помогите! Нужно динамически создавать ComboBox и желательно Progress bar внутри меню. с прогрессбаром конечно не...

Опять про "склейку"
Здравствуйте. Поиском пользовался - информация разная, оттого и спрашиваю, просьба не ругать. Для обозначения главного зеркала нужно: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru