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

2023-12-29

我正在(重新)学习 C 编程,因此以下问题是为了理解。 使用 scanf() 我了解到(或者我自己发现,实际上不需要很长时间就能达到这一点)刷新 stdin 是一件好事。我进一步发现(在您的帮助下) fflush(stdin) 不是标准的操作,例如不适用于海湾合作委员会。 我继续使用下面的代码片段来刷新标准输入。它在这里提供(谢谢)。如果 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);

}

别想stdin作为数据可用或不可用的地方。它被称为一个stream原因是:你总是对next从中获取数据(只要有可用的数据)。

具体来说,您决定“刷新”(也许“排空”是一个更好的词)流reason。也许您向用户请求了一个整数,而他们却输入了字母。那么,您就知道该流不是“空”的,因为其中有字母!因此,阅读直到下一个换行符是一个合理的想法。

或者也许(为了与其他一些实用程序兼容?)您有一个协议,其中某一行输入是不相关的。然后你可以“排空”那条线;用户是否已输入任何内容并不重要,因为您必须等到他们输入后才能接受他们的更多输入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C中检查stdin是否为空 的相关文章

随机推荐