1. 程式人生 > >C++中while(std::cin >> value)的思考

C++中while(std::cin >> value)的思考

例子:
#include  <iostream>
int main()
{
    int sum = 0, value = 0;
    while(std::cin >> value)
    {
        sum += value;
    }
    std::cout << "sum is " << sum << std::endl;
    return 0;
}

輸入運算子( >> ):從左側istream物件讀入資料存入右側物件中,並返回istream物件作為運算結果。因此,std:cin是while判斷的依據。 輸入原理: 1(執行VS2010檢測) 輸入(cin)緩衝是行緩衝。當從鍵盤上輸入一串字元,字元首先是存入緩衝區,cin物件會對緩衝區進行檢測,當按回車後,cin就會檢測輸入緩衝區中是否有了可讀的資料。如果有資料就會讀入資料存入右側物件,會自動忽略space空格符,當遇到與右側物件型別不符的資料時會結束,退出while。 輸入:1 2 3 q "enter" 輸出:6 在windows中,採用的是阻塞式檢測,在回車之後會檢測流結束標誌 ,在VS中“ctrl+z
”作為輸入流結束的標誌,所以在存入資料的時候,會自動忽略ctrl+z之後的資料。 注:阻塞式檢查方式指的是隻有在回車鍵按下之後才對此前是否有 Ctrl+Z 組合鍵按下進行檢查。 輸入:1 2 3 “ctrl+z”1 2 "enter" 輸出:6 注:gcc在windows上執行的時候,"ctrl + d"為輸入流結束標誌。 Unix/Linux系統下一般採用非阻塞式的檢查 ,非阻塞式樣指的是按下 Ctrl+D 之後立即響應的方式。如果在按 Ctrl+D 之前已經從鍵盤輸入了字元,則 Ctrl+D的作用就相當於回車,即把這些字元送到輸入緩衝區供讀取使用,此時Ctrl+D不再起流結束符的作用。如果按 Ctrl+D 之前沒有任何鍵盤輸入,則 Ctrl+D 就是流結束的訊號。