c - 如何在清除标准输入之前检查标准输入是否为空

标签 c windows visual-c++ stdin

我一直在使用代码

while (getchar() != '\n');

清除程序中stdin中的所有内容。然而,我有时会遇到一个小问题。有时,在我的程序中,当我调用 getchar() 时,stdin 中可能有也可能没有任何内容。当 stdin 中没有任何内容时,最终会调用 getchar() 并等待 stdin 中的内容>。然后我必须在键盘上输入\n,否则程序就会卡在这一行。我想知道是否有一种简单的方法可以在执行 while (getchar() != '\n'); 之前首先检查 stdin 是否为空,以避免这种情况有问题吗?

不确定编译器对答案是否重要,但我使用的是 Visual Studio 2017。 编辑:当我说 stdin 时,我指的是键盘输入的字符

最佳答案

stdin 是一个流。如果进程正在从控制台读取,只要您不关闭流,该进程仍在从流中读取。在终端中,您可以通过点击 ^D 关闭输入流。

应用程序不是读心者。它无法知道流何时“完成”。如果要读取流中的数据并希望在流未完成之前关闭进程,则需要将流设置为非阻塞。阅读直到没有任何返回并且进程退出。

How do you do non-blocking console I/O on Linux in C?

关于c - 如何在清除标准输入之前检查标准输入是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893045/

相关文章:

c++ - "Hiding"WinAPI调用

C语言,运行失败,十进制转二进制

windows - Windows CardSpace 有何用途?

windows - 如何在Windows中为Docker容器设置静态IP地址?

无法获取 libsodium 预构建库供 mingw windows 工作

c - 使用指针时的错误和警告消息

visual-c++ - 阿尔法混合去除图像中的接缝

c++ - VS2005 : How to compile projects as if it was VS6?

c++ - 使用 C++ 的 Visual Studio 2017 社区的代码覆盖率

C - 每次循环执行时,在循环中声明的变量是否在同一位置获取内存?