Замена флеша (стандартный)

У меня есть код ниже,

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

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

3 ответа

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

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

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

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

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

Для C на GNU

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

__fpurge(stdin);

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

scanf(" %c",&c);

или же

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

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

Другие вопросы по тегам