【发布时间】:2009-12-18 12:09:07
【问题描述】:
有什么方法可以检查cin中是否有东西吗?我尝试了 peek() 但如果没有任何东西 peek() 等待输入,那不是我想要的。 谢谢
【问题讨论】:
有什么方法可以检查cin中是否有东西吗?我尝试了 peek() 但如果没有任何东西 peek() 等待输入,那不是我想要的。 谢谢
【问题讨论】:
您不能使用 cin 读取击键,然后如果没有可用的内容则继续执行其他操作,我认为这可能是您想要的。 cin 是一个缓冲流,根本无法以这种方式工作。事实上,使用标准 C++ 无法做到这一点 - 您必须使用操作系统特定的功能。
【讨论】:
cin 实现,如果没有输入等待,则进入 EOF 状态。然而,我知道的标准编译器库(包括 MS VS、Borland 和 GCC)不提供这样的实现。 (我不确定,因为我不知道流是否可以自行停止处于 EOF 状态,这是cin 在击键时必须做的事情。)
std::cin.peek(),如果缓冲区中没有击键,则返回traits_type::eof,而不是等待击键。 (我知道它没有,但我认为它可能。)它必须是可行的,因为如果你将标准输入流重新绑定到一个文件(例如在执行程序时)cin 将在文件结束时正确进入 EOF 状态。
C++ 流和流缓冲区是同步的,也就是说它们会阻塞,直到有足够的输入可供读取。没有可移植的方法来异步检查流。考虑从单独的线程调用 peek()。
【讨论】: