2011-01-01 1 views
3

У меня есть некоторый код, который запустить repetedly:Как очистить буфер консоли?

Е ("Вы хотите продолжить Y/N: \ п");
keepplaying = getchar();

в следующем моем коде работает, он не ждет ввода. Я узнал, что getchar в засекреченном времени использует '\ n' в качестве charcter. im gussing это связано с некоторым буфером sdio, поэтому он сохраняет последний вход, который был «Y \ n» или «N \ n».

мой вопрос: как я очищаю буфер перед использованием getchar, который заставит getchar ждать моего ответа?

+2

Вы используете C или C++? Это не тот же язык. –

ответ

4

ПРОМЫВКА входной поток вызывает неопределенное поведение.

int fflush (FILE * ostream);

ostream указывает на выходной поток или поток обновлений, в котором в последнее время операции наиболее не был введен, то функция fflush вызывает какие-либо незаписанные данных для этого потока, чтобы быть доставлены в хост-среде, чтобы записать к файлу; в противном случае поведение не определено.

Чтобы правильно очистить входной поток сделать что-то вроде следующего:

int main(void) 
{ 
    int ch; 
    char buf[BUFSIZ]; 

    puts("Flushing input"); 

    while ((ch = getchar()) != '\n' && ch != EOF); 

    printf ("Enter some text: "); 

    if (fgets(buf, sizeof(buf), stdin)) 
    { 
    printf ("You entered: %s", buf); 
    } 

    return 0; 
} 

См Why fflush(stdin) is wrong и Flush the input buffer.

+0

thats, что я сделал, я просто хотел узнать, есть ли более простой способ. – DoronS

+0

. Более простой способ - использовать fflush, который может не работать во всех средах и во всех ситуациях. – taskinoor

+1

Вы можете использовать библиотеки, специфичные для вашей платформы, для обработки ввода пользователем (WIN32, GTK, ncurses и т. Д.), Которые скроют от вас эти детали. –

1

использование fflush() и FlushAll() перед Printf

1

Насколько я знаю, flushall не является POSIX. Для того, чтобы промыть буфер консоли стандартным образом, вы можете просто использовать команду:

fflush(NULL); 

Эта тема, кажется, немного старый, но я надеюсь, что это все-таки может помочь другим.