Я (пере) изучаю C-программирование, поэтому следующий вопрос предназначен для понимания. Используя scanf (), я узнал (или выяснил сам, на самом деле это не займет много времени, чтобы дойти до этого момента), что очистка stdin - это хорошо. Далее я узнал (с вашей помощью), что fflush (stdin) не является стандартным делом и, например, не работает с gcc. Я перешел к использованию приведенного ниже фрагмента кода для очистки стандартного ввода-вывода. Он был предоставлен здесь (спасибо). Он отлично работает, если stdin не пуст. Тем не менее, если stdin пуст, он не работает. Функция fgetc () в моей функции очистки просто ждет и блокирует программу. Фактически, все другие известные мне функции чтения stdin (scanf (), fgetc (), gets (), fgets (), getchar ()) демонстрируют такое же поведение. Таким образом, моя функция очистки на самом деле является условной очисткой: она очищается только в том случае, если буфер не пуст. Если он пуст, промывка блокирует программу и ожидает ввода на стандартный ввод. Это не то, что я хочу. Итак, мне нужен способ проверить, пуст ли stdin. Если это так, я продолжаю. Если это не так, я запускаю свою функцию промывки.
Итак, я ищу стандартный способ C проверить, пуст ли stdin.
Большое спасибо за любую помощь!
void flush_line(FILE *);
/* function to flush stdin in a C standard way since*/
/* fflush(stdin) has undefined behaviour. */
/* s. http://stackoverflow.com/questions/20081062/fflushstdin-does-not-work-compiled-with-gcc-in-cygwin-but-does-compiled-with-v */
void flush_line(FILE *fin)
{
int ch;
do
{
ch = fgetc(fin);
} while (ch != '\n' && ch != EOF);
}