2017-02-04 125 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