1. 程式人生 > >結束while(cin >> value)

結束while(cin >> value)

當看《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時,效果圖如下:
當輸入數字後按Ctrl+Z時
當輸入數字後故意輸錯時回車,效果圖如下:
當輸入數字後故意輸錯時回車

  1. 《c++ primer 》