Опять про fflush, уже stdout
От: warobushek  
Дата: 31.08.08 01:43
Оценка:
Уважаемые профессионалы. В книге Хэзфилд, Кирби " Искусство программирования на языке Си. Фундаментальные алгоритмы.... " на 58 стр. увидел текст ниже. Скажите, кто прав? Он или авторы следующих ресурсов : http://c-faq.com/stdio/stdinflush.html http://c-faq.com/stdio/stdinflush2.html .

Подавление буферов ввода
Ниже демонстроруется обычно применяемая методика освобождения от нежелательных символов во входном потоке:

printf("Введите возраст");
scanf("%d", &age);     /*получение возраста*/ 
printf("Введите размер обуви:");
fflush(stdin);
scanf("%d", &shoesize);

Почитаем, что стандарт говорит об этом фрагменте:
#include <stdio.h>
int fflush(FILE* stream);


Из раздела 7.19.5.2: "2 Если stream указывает на выходной поток
или на модификацию потока, в котором последняя не было операцией ввода,
функция fflush удаляет любые непечатаемые данные, для которых поток доставлен
в хост-среду для записи в файл; в противном случае поведение неопределено".


Если вы хотите избавиться от случайных символов между обращениями к scanf, можете сделать это следующим образом:
 printf("Введите возраст:");
fflush(stdout);
scanf("%d",&age);
printf("Введите размер обуви:");
fflush(stdout);
scanf(" %d", &shoesize); [color=red] /*обратите внимание на лидирующий пробел*/ [/color]


(Как вы видите, я принял возможность продемонстрировать, что вы можете переносимо собрать ввод на той же строке, что и предыдущий вывод, разумно используя функцию fflush() )


Скажите, кто прав? Что дает этот "волшебный" пробел в его примере?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.