The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Самый правильный способ очистить stdin. Ваше мнение"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Самый правильный способ очистить stdin. Ваше мнение"  
Сообщение от newbie (??) on 03-Дек-06, 13:24 
При некорректном вводе в функции scanf, в потоке stdin остается мусор, и соответственно второй scanf пролетает, не запрашивая ввод. Вопрос - как наиболее правильно (корректно) очистить поток stdin (чтобы код был портабельным). Варинты

1. __fpurge(stdin)

2. Использовать вспомогательный буфер и функцию fgets

3. Комбинация операторов: scanf( "%*[^\n]" ); scanf( "%*c" );

4. Другой вариант

Ваше мнение?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Самый правильный способ очистить stdin. Ваше мнение"  
Сообщение от red_mould (ok) on 03-Дек-06, 15:26 
>При некорректном вводе в функции scanf, в потоке stdin остается мусор, и
>соответственно второй scanf пролетает, не запрашивая ввод. Вопрос - как наиболее
>правильно (корректно) очистить поток stdin (чтобы код был портабельным). Варинты
>
>1. __fpurge(stdin)
>
>2. Использовать вспомогательный буфер и функцию fgets
>
>3. Комбинация операторов: scanf( "%*[^\n]" ); scanf( "%*c" );
>
>4. Другой вариант
>
>Ваше мнение?

Можно попробовать также например fflush(stdin) вроде так если мне не изменяет склероз хотя ту смотря что надо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Самый правильный способ очистить stdin. Ваше мнение"  
Сообщение от newbie (??) on 03-Дек-06, 16:48 

>Можно попробовать также например fflush(stdin) вроде так если мне не изменяет склероз
>хотя ту смотря что надо

fflush не очищает stdin (под Linux).
    


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Самый правильный способ очистить stdin. Ваше мнение"  
Сообщение от vic (??) on 04-Дек-06, 12:17 
>
>>Можно попробовать также например fflush(stdin) вроде так если мне не изменяет склероз
>>хотя ту смотря что надо
>
>fflush не очищает stdin (под Linux).
>
и не должен
см. тут https://www.opennet.ru/openforum/vsluhforumID9/3180.html
кстати, по этой ссылке которую вы могли бы и сами найти (благо поиск рулит) объясняется и специфика терминалов.

fflush() по posix определен только для output потоков. см man по fflush(), а так же тут http://www.unix.org. Поэтому в windows fflush(stdin) это есть не стандартное поведение, точнее это просто неправильное использование функции.

ИМХО: А в общем надо бросать scanf и переходить на всякие библиотеки readline, curses и т.п. где эти проблемы уже решены :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Самый правильный способ очистить stdin. Ваше мнение"  
Сообщение от perece on 04-Дек-06, 18:54 
>>
>>>Можно попробовать также например fflush(stdin) вроде так если мне не изменяет склероз
>>>хотя ту смотря что надо
>>
>>fflush не очищает stdin (под Linux).
>>
>и не должен
>см. тут https://www.opennet.ru/openforum/vsluhforumID9/3180.html
>кстати, по этой ссылке которую вы могли бы и сами найти (благо
>поиск рулит) объясняется и специфика терминалов.
>
>fflush() по posix определен только для output потоков. см man по fflush(),
>а так же тут http://www.unix.org. Поэтому в windows fflush(stdin) это есть
>не стандартное поведение, точнее это просто неправильное использование функции.
>
>ИМХО: А в общем надо бросать scanf и переходить на всякие библиотеки
>readline, curses и т.п. где эти проблемы уже решены :)
или хотябы fgets+sscanf. по крайней мере не глючит (в сочетании с readline sscanf всеравно понадобится скорее всего)

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру