Замена флеша (стандартный) - PullRequest
5 голосов
/ 08 июня 2011

У меня есть следующий код,

fflush(stdin);
print("Enter y/n");
scanf("%c",&a);

Здесь он завершает работу перед тем, как дать input.it похоже, что проблема в том, что он не очищает входной буфер, который может иметь некоторые ненужные символыЕсть ли альтернатива flush (stdin). Этот фрагмент кода работает в Solaris, но не работает в Linux.

Ответы [ 3 ]

16 голосов
/ 08 июня 2011

Это хорошо объяснено в C FAQ . Смотрите также: объяснение . Предлагаемые решения:

  • Выйти из Scanf. Используйте fgets и sscanf
  • Используйте это, чтобы съесть новую строку

    while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;
    

Тот факт, что очистка stdin работает в некоторых реализациях неверен .

Некоторые поставщики реализуют fflush так что fflush (stdin) отбрасывает непрочитанное персонажи, хотя переносимые программы не может зависеть от этого.

3 голосов
/ 24 марта 2013

Для C в GNU

вы можете использовать

</p>

<pre><code>__fpurge(stdin);

, включая заголовок stdio_ext.h для доступа к функции.Хотя пост очень старый, я подумал, что это может помочь некоторым разработчикам Linux.

2 голосов
/ 15 мая 2014
scanf(" %c",&c);

или

scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)

Пробелы в строке формата scanf () будут игнорировать все пробелы до первого непробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...