如何检查C++中的输入流(cin)是否有内容

7

有没有办法检查cin中是否有内容?我尝试过peek()函数,但是如果没有任何内容,peek()函数会等待输入,这不是我想要的。谢谢。

2个回答

5

如果你想使用cin读取按键,然后在没有按键时执行其他操作的话,是行不通的。因为cin是一个缓冲区流,无法满足这样的需求。实际上,在标准C++中没有办法做到这一点,你需要使用特定于操作系统的功能。


我认为标准允许实现cin,如果没有输入等待,则进入EOF状态。然而,我知道的编译器的标准库(包括MS VS、Borland和GCC)并没有提供这样的实现。(我不确定,因为我不知道流是否可以自行停止处于EOF状态,这就是cin在按键时必须执行的操作。) - Adam Badura
1
eof状态是读取失败的结果 - 只有在进行读取操作时才会设置。 - anon
是的。因此,例如调用std::cin.peek(),如果缓冲区中没有按键,则返回traits_type :: eof而不是等待按键。 (我知道它不会,但我认为它可能会。)这是可行的,因为如果您将标准输入流重新绑定到文件(在执行程序时),则cin将在文件结尾正确进入EOF状态。 - Adam Badura

4

C++ 流和流缓冲区是同步的,也就是说它们会阻塞,直到有足够的输入可供读取。没有一种可移植的方法可以异步地检查流。考虑从单独的线程中调用 peek()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接