От: | warobushek | ||
Дата: | 31.08.08 01:43 | ||
Оценка: |
Подавление буферов ввода
Ниже демонстроруется обычно применяемая методика освобождения от нежелательных символов во входном потоке:
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() )