2017-02-04 130 views
0

内部我已经写了简单的代码:C++:CIN while循环

#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

当写入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

那么,这到底是xx这里停留相同的位置为cin,它是istream&类型的对象。

因此,当你谈论truefalse,你实际上是在谈论这是否退还istream&参考,请参考一个对象,无论是true还是false。当标准输出捕捉到一个EOF符号时(例如当你在系统中输入unix中的Ctrl-C时,或者当你读到一个文件的末尾时),将会是false

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

#include <iostream> 
using namespace std; 
int main() 
{ 
    int a, b; 
    auto x = cin >> a >> b 
    while (x) 
    { 
    cout << a << b << "\n"; 
    } 
} 

如果您正在使用像Visual Studio的IDE,你可以在变量x点您的鼠标,它会提示你x的类型,那将是一个istream&

另外,由于Bob__,这istream&类可以是转换为ios::operator bool类,如被写入here,无论是truefalse表示此stream,它therfore的状态(ios_base::iostate

可以使用返回流引用的流和函数作为循环条件,从而产生惯用的C++输入循环,如while(stream >> value) {...}while(getline(stream, string)){...}。只有输入操作成功时,这些循环才会执行循环的主体。

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

+1

你也许应该提到[operator bool](http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool)。 –

+0

@Chazeon:更新后的答案非常具有说服力。谢谢。 :) – aps120797