標准輸入流指的是從輸入設備(如鍵盤)中向程序輸入數據.在頭文件iostream.h中定義 cin,cout,cerr對象.cin是輸入流,其他都為輸出流.
in是istream的對象,它從輸入設備中獲得數據.輸入的實際過程是:首先輸入完數據按下回車,空格等空白字符後,該數據就被送入鍵盤緩沖區,形成了一個輸入流,然後通過提取運算符"
>>"從流中提取數據給程序賦值.
需要注意的是cin在賦值的時候會對數據類型進行檢查,cin中有一個狀態提示符,用來表示cin是否正確工作,如果類型不匹配狀態提示符變成'1',正常時為'0',一旦變為'1',cin便無法再進行賦值.
這時便需要cin,clear(),cin.sync(),cin.ignor()
下面用實例進行說明
#include<iostream> using namespace std; int main() { int a; cout << "輸入一個字符:"<<endl; cin >> a; //cin.clear(); //cin.sync(); cout << "failbit=" << cin.fail() << endl; //沒有進行錯誤的處理,輸出1 cout << "輸入一個數字:"<<endl; cin >> a; //無法輸入,現在cin還未恢復正常 cout << "failbit=" << cin.fail() << endl; //任然為1 cin.clear(); //cin.sync(); cout << "failbit=" << cin.fail() << endl; //通過cin.clear()使狀態標識符恢復正常'0' cout << "輸入一個數字:"<<endl; cin >> a; //無法輸入,雖然通過cin.clear()使cin恢復正常,但緩沖區的數據還存在,故直接將原來的字符數據賦給a cout << "failbit=" << cin.fail() << endl; //由於類型不匹配再次出錯 cin.clear(); cin.sync(); cout << "輸入一個數字:"<<endl; cin >> a; cout << "failbit=" << cin.fail() << endl; //通過cin.clear()重置流,通過cin.sync()清空流,即清空緩沖區數據,然後便可重新輸入 system("pause"); return 0; }
cin.clear()作用是重置流,使cin>>可以再次賦值,但並沒有清除流中的數據.所以cin.clear()一般和cin.sync()連用.
cin.ignor()作用和cin.sync()作用類似,但它並不是清空整個流,而是部分清除,可以人為控制的,如清理掉當前行,或者清除掉行尾的換行符.ignor的作用顯然是更精確的控制緩沖區數據.
比如可以這麼用:
cin.ignore(1024,'\n'),通常把第一個參數設置得足夠大,這樣實際上總是只有第二個參數'\n'起作用,所以這一句就是把回車(包括回車)之前的所以字符從輸入緩沖(流)中清除出去。
下面是部分用法:
cin.ignore(numeric_limits<std::streamsize>::max(),'/n');//清除當前行
cin.ignore(numeric_limits<std::streamsize>::max()); //清除cin裡所有內容
不要被長長的名字嚇倒,numeric_limits<std::streamsize>::max()不過是climits頭文件定義的流使用的最大值,你也可以用一個足夠大的整數代替它。