結束while(cin >> value)
阿新 • • 發佈:2019-02-08
當看《c++ primer》這本書的時候有這樣一段示例程式碼
#include <iostream>
int main(){
int val,sum=0;
while(std::cin>>val){
sum+=val;
}
std::cout<<"the result is "<<sum<<std::endl;
return 0;
}
當自己在終端除錯的時候輸入數字並多次回車始終無法結束while迴圈,看到後來才明白了原因。
原因 1
- what is cin
cin是istream型別的物件,這個物件也被稱為標準輸入。 - what is >>
>>為輸入運算子
- 左側引數:istream物件
- 右側引數:任意物件
- 返回值:返回istream物件
- 作用:它從給定的istream讀入資料,並存入給定的物件中
- 分析std::cin >> value
此表示式從標準輸入讀取下一個數,儲存在value中,輸入運算子返回其左側運算物件,在這個示例中是std::cin.因此,此迴圈實際上檢測的是std::cin。
當我們使用一個istream物件作為條件時,其效果是檢測流的狀態。如果流是有效的,即流未遇到錯誤,那麼檢測成功。當遇到檔案結束符,或遇到一個無效輸入時,istream物件的狀態會變成無效。處於無效的istream物件為使條件為假。因此,while迴圈一直會執行,直到遇到檔案結束符或者錯誤。
小提示:windows下的輸入檔案結束符為Ctrl+Z,Unix和Linux下一般是Ctrl+D
執行效果
本人測試環境為linux
當輸入數字後按Ctrl+Z時,效果圖如下:
當輸入數字後故意輸錯時回車,效果圖如下: