當咱們使用一個istream對象做爲條件時,其效果是檢測流的狀態。若是流是有效的,即流未遇到錯誤,那麼檢測成功。當遇到文件結束符,或遇到一個無效輸入時(例如須要將輸入讀到一個int變量中,但實際從鍵盤輸入的是字符),istream對象的狀態會變成無效。處於無效的istream對象會是條件變爲假。ios
當從鍵盤向程序輸入數據時,對於如何指出文件結束符,不一樣的操做系統有不一樣的實現。在Windows平臺中,輸入文件結束符的方法是:按Ctrl+z,而後按Enter。在Unix或Linux下是按Ctrl+d,無需Enter,固然,因爲當你輸入Ctrl+d後,它仍然停留在系統的輸入緩衝區中,因此你仍是須要使用一個Enter使其生效。下面是幾個關於該用法的示例:windows
#include <iostream>
#include <string>測試
using namespace std;
/*
測試標準輸入cin和文件結束符
測試平臺:Windows
*/
int test_string_one();
int test_string_two();
int test_string_three();spa
int main()
{
//test_string_one();
test_string_two();
}
int test_string_one() //第一個程序:輸入的是整數
{
int num;
while(cin>>num)
cout << num << " ";
return 0;
}
/*
輸入:1 2 3 4 5 Ctrl+d Enter
輸出:1 2 3 4 5
此處之因此循環中止,是由於遇到一個無效輸入(Ctrl+d),而不是遇到了文件結束符。
由於在windows平臺,結束符是Ctrl+z,而後按Enter。
例如輸入:1 2 3 4 5 a Enter
輸出還是:1 2 3 4 5
固然若是該測試用例用於Linux下,那麼因爲系統的結束符是Ctrl+d,因此雖然輸出同樣,
可是之因此循環中止,是由於到達了文件結束,而不是獲得了一個無效輸入。
*/操作系統
int test_string_two() //第二個程序:輸入的是字符串
{
string word;
while(cin>>word)
cout << word << " ";
return 0;
}
/*
輸入:hello world Ctrl+z 回車
輸出:hello world
此處之因此循環中止,是由於遇到一個文件結束符。
由於在windows平臺,結束符是Ctrl+z,而後按Enter。
*/
對象