Как очистить буфер ввода в C?

У меня есть следующая программа:

int main(int argc, char *argv[])
{
  char ch1, ch2;
  printf("Input the first character:"); // Line 1
  scanf("%c", &ch1); 
  printf("Input the second character:"); // Line 2
  ch2 = getchar();

  printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
  printf("ch2=%c, ASCII code = %d\n", ch2, ch2);

  system("PAUSE");  
  return 0;
}

Как объяснил автор приведенного выше кода: Программа не будет работать должным образом, потому что в строке 1, когда пользователь нажимает Enter, она оставьте во входном буфере 2 символа: Введите ключ (код ASCII 13) и \ n (код ASCII 10) . Следовательно, в строке 2 он будет читать \ n и не будет ждать, пока пользователь введет символ.

Хорошо, я понял. Но мой первый вопрос: почему второй getchar () ( ch2 = getchar (); ) не читает клавишу Enter (13) , а не \ n символ?

Затем автор предложил 2 способа решения таких проблем:

  1. используйте fflush ()

  2. напишите такую ​​функцию:

     void {{ 1}} clear (void) 
     {
    while (getchar ()! = '\ N'); 
    } 
     

Этот код действительно работал. Но я не могу себе объяснить, как это работает? Поскольку в операторе while мы используем getchar ()! = '\ N' , это означает чтение любого отдельного символа, кроме '\ n' ? если да, то во входном буфере все еще остается символ '\ n' ?

70
задан Steven Penny 18 February 2013 в 06:47
поделиться