【问题标题】:How to check if there is anything in cin [C++]如何检查cin中是否有任何东西[C++]
【发布时间】:2009-12-18 12:09:07
【问题描述】:

有什么方法可以检查cin中是否有东西吗?我尝试了 peek() 但如果没有任何东西 peek() 等待输入,那不是我想要的。 谢谢

【问题讨论】:

    标签: c++ istream


    【解决方案1】:

    您不能使用 cin 读取击键,然后如果没有可用的内容则继续执行其他操作,我认为这可能是您想要的。 cin 是一个缓冲流,根本无法以这种方式工作。事实上,使用标准 C++ 无法做到这一点 - 您必须使用操作系统特定的功能。

    【讨论】:

    • 我认为标准允许 cin 实现,如果没有输入等待,则进入 EOF 状态。然而,我知道的标准编译器库(包括 MS VS、Borland 和 GCC)不提供这样的实现。 (我不确定,因为我不知道流是否可以自行停止处于 EOF 状态,这是cin 在击键时必须做的事情。)
    • eof 状态是读取失败的结果 - 除非您进行读取,否则不会设置它。
    • 是的。因此,您调用例如std::cin.peek(),如果缓冲区中没有击键,则返回traits_type::eof,而不是等待击键。 (我知道它没有,但我认为它可能。)它必须是可行的,因为如果你将标准输入流重新绑定到一个文件(例如在执行程序时)cin 将在文件结束时正确进入 EOF 状态。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多