如何在C中检查stdin是否为空

use*_*324 5 c stdin flush

我正在(重新)学习 C 编程,因此以下问题是为了理解。使用 scanf() 我了解到(或者我自己发现,实际上不需要很长时间就能达到这一点)刷新 stdin 是一件好事。我进一步发现(在您的帮助下)fflush(stdin) 不是标准的操作,例如不适用于 gcc。我继续使用下面的代码片段来刷新标准输入。它在这里提供(谢谢)。如果 stdin 不为空,它就可以正常工作。然而,如果 stdin 为空,则不起作用。我的刷新函数中的 fgetc() 只是等待并阻止程序。事实上,到目前为止我所知道的所有其他标准输入读取函数(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);

}
Run Code Online (Sandbox Code Playgroud)

rob*_*ert 0

您可以使用 select 或 poll 来检查文件描述符是否可读。但不在 ANSI C 中。