C ++:cin在while循环中

时间:2017-02-04 08:49:48

标签: while-loop cin

我写了一个简单的代码:

#include <iostream>
using namespace std;
int main()
{
  int a, b;
  while (cin >> a >> b)     //Note the cin inside while loop
  { 
    cout << a << b << "\n";
  }
}

我们知道while循环仅在表达式评估true1)或false0)时起作用。 cin如何评估truefalse

同样当我输入数字时,while循环如何运行,当我输入非数字时停止?它如何评估真假?

1 个答案:

答案 0 :(得分:2)

当你写cin >> a时,你实际上在使用std::istream::operator>>,根据引用here,此运算符返回istream&对象引用,并将右手变量(引用)作为其参数。这就是你如何链接它:cin >> a >> b

要以另一种方式查看此cin >> a >> b链,当发生故障时,这是以下两个步骤:

  • 第一步,cin >> a返回一些中间值,假设它是x。 (您实际上可以尝试auto x = cin >> a
  • 第二步,您正在执行(cin >> a) >> b,当我们使用此中间值x时,我们可以将其写为x >> b

那么这x到底是什么? x此处与cin保持相同的位置,它是istream&类型的对象。

因此,当您谈论truefalse时,您实际上是在讨论是否返回istream&引用,引用对象,是true还是falsefalse。当标准输出捕获EOF符号时(例如,在unix中输入Ctrl-C,如系统,或者当您读取到文件末尾时),它将是#include <iostream> using namespace std; int main() { int a, b; auto x = cin >> a >> b while (x) { cout << a << b << "\n"; } }

因此,您的代码可以扩展为

x

如果您使用的是像Visual Studio这样的IDE,您可以将鼠标指向变量x,它会提示您istream&的类型,那将是istream&

另外,感谢Bob__,这个ios::operator bool类可以转换为true类,编写为here,无论是false还是ios_base::iostate }表示此stream的状态(while(stream >> value) {...}),因此,

  

可以使用返回对流的引用作为循环条件的流和函数,从而产生惯用的C ++输入循环,例如while(getline(stream, string)){...}<li><a href="examples/test.html"></a></li> 。只有在输入操作成功时,这样的循环才会执行循环体。

为了进一步理解,您应该阅读教科书中的操作员(重载)一章。