Замена флеша (стандартный)
У меня есть код ниже,
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() будут игнорировать любые пробелы до первого непробела.