Форум программистов, компьютерный форум CyberForum.ru

Пожалуйста подскажите что делает данная функция? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.79
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
13.01.2012, 19:54     Пожалуйста подскажите что делает данная функция? #1
Пожалуйста подскажите что делает данная функция?
fflush(stdin);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2012, 19:54     Пожалуйста подскажите что делает данная функция?
Посмотрите здесь:

C++ Объясните пожалуйста что делает функция
Что делает данная функция C++
C++ Ребята! Пожалуйста, объясните что делает данная программа?
Что делает данная программа? C++
Что делает данная строка в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
13.01.2012, 20:03     Пожалуйста подскажите что делает данная функция? #2
Очищает буфер входного потока.
Желательно вставлять перед всеми scanf'ами, что бы вводилось именно то, что нужно.
Это если в кратце

Добавлено через 3 минуты
Но можно добавить, что само использование fflush c входным потоком противоречит стандарту Си
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
13.01.2012, 20:04  [ТС]     Пожалуйста подскажите что делает данная функция? #3
т.е.fflush вообще не относится к си а к чему тогда?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.01.2012, 20:06     Пожалуйста подскажите что делает данная функция? #4
.Malek., fflush не применим к входным потокам. Она для них не определена.
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
13.01.2012, 20:28     Пожалуйста подскажите что делает данная функция? #5
Нет, относиться - относится, и многие профессора, преподаватели ее очень часто используют и заставляют использовать других. На мой взгляд - до первой ошибки. В одном из своих проектов действительно ее использовал, т.к. вводить надо было много, мало ли что, где накроется. Без нее действительно бывали ошибки, а вот так, что бы наоборот - использовал и ошибка вылетела, такого еще не было(наверное, мало пользовался)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.01.2012, 20:38     Пожалуйста подскажите что делает данная функция? #6
Eugene THE BEST, Как перед следующей итерацией опустошить stdin
лучше так
C
1
2
int c;
while ( getchar () != EOF ) ;
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.01.2012, 20:39     Пожалуйста подскажите что делает данная функция? #7
go, как так? Чем в С входной поток от выходного отличается? Та же переменная типа FILE *.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.01.2012, 20:55     Пожалуйста подскажите что делает данная функция? #8
silent_1991, вы про это?
Remarks

The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.
Но как же это?
If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior.
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
13.01.2012, 21:03     Пожалуйста подскажите что делает данная функция? #9
go,
Спасибо, буду теперь применять
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.01.2012, 22:02     Пожалуйста подскажите что делает данная функция? #10
go, ну, во-первых, там сказано про поведение в некоторых реализациях, которое не является стандартным, но я всё-же ответил потому, что вы написали, что функция для потока ввода не определена. Поскольку в С нет перегрузки, то такая функция определена для любого потока, в том числе и для потока ввода.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.01.2012, 22:10     Пожалуйста подскажите что делает данная функция? #11
How can I flush pending input so that a user's typeahead isn't read at the next prompt? Will fflush(stdin) work?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
13.01.2012, 22:25     Пожалуйста подскажите что делает данная функция? #12
silent_1991, получится не переносимый код.
Вы не можете почисить буфер stdin, потому что нет такой возможности.
функция fflush() даёт неопределённой поведение, когда её вызывают для потока ввода, а stdin - поток ввода
Есть компиляторы, в которых это возможно. Но повторюсь, Вы получите не переносимый код, т.к. все компиляторы не обязаны поддерживать это. В BSD, например, http://www.freebsd.org/cgi/man.cgi?q...lt&format=html
http://faq.cprogramming.com/cgi-bin/...&id=1043284392

Добавлено через 17 секунд
Или я не прав?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2012, 22:28     Пожалуйста подскажите что делает данная функция?
Еще ссылки по теме:

C++ Пожалуйста подскажите, что делает программа?
Подскажите, что делает функция cudaMalloc C++
Что делает данная конструкция? C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.01.2012, 22:28     Пожалуйста подскажите что делает данная функция? #13
go, мое сообщение относилось лишь к этим вашим словам:
Цитата Сообщение от go Посмотреть сообщение
Она для них не определена.
Поскольку это неверно, я решил это опровергнуть. Не ожидал, что это вызовет дискуссию)))
Yandex
Объявления
13.01.2012, 22:28     Пожалуйста подскажите что делает данная функция?
Ответ Создать тему
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru