【问题标题】:Seems redundant use of cin as a condition with if, while [duplicate]似乎多余地使用 cin 作为 if, while [重复] 的条件
【发布时间】:2017-07-19 18:24:48
【问题描述】:

我得到了一个对我来说似乎多余的代码:

    char c;
    cin>>c;
    if(cin&&c=='n')
    //do something

我不明白在 if 中引入 cin 的价值,它是否总是会有 TRUE 值,因为我从未遇到过任何情况(在我有限的经验)没有构造这个 istream 对象。

同样,我也看到了这个:

     if(cin)

请纠正我哪里出错了。现在人们不会发布我已经知道的错误流部分,主要部分是除了失败之外,流何时失败 ios_base::Init

【问题讨论】:

  • @MooingDuck 那么流什么时候会遇到一些错误:你能给我一些例子,链接吗?
  • Gurav int x, cin >> x; 用户输入“FUBAR!”,无法转换为intchar 有点困难。
  • @user4581301 如果没有什么可输入的,只是简单的 cin -> 我已经编辑了问题,请看一下。
  • @Gaurav cin 在“未构造时”不处于错误状态。当它在提取数据时遇到错误时,它处于错误状态。在你的 sn-p 中它如何失败的一个例子是如果它遇到文件结尾,例如如果你的程序的输入是从一个文件或从另一个已结束的程序传输的。

标签: c++ istream


【解决方案1】:

std::cinstd::basic_istream<char> 的一个实例。由于它是在条件的上下文中使用的,因此我们对它的 bool 转换运算符感兴趣。来自http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

std::basic_ios::operator bool

如果流没有错误并且准备好进行 I/O 操作,则返回 true。具体来说,返回 !fail()

从文档中,很明显if(cin) 是为了检查cin 是否有任何错误。更准确地说,它是说“如果cin 在它的最后一次操作中没有遇到错误”

if(cin&&c=='n') 中的条件遵循相同的原则,但也检查输入流是否提供了n。也就是说,“如果cin没有遇到错误,返回了字符n

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2020-12-11
    • 2014-09-08
    相关资源
    最近更新 更多