if(! cin ) 是什么意思,有什么作用,应该怎么用
光阴似箭催人老,日月如移越少年。
在std::basic_ios中定義了operator bool:
std::basic_ios
operator bool
explicit operator bool() const; //C++11
所以如果對標準IO流進行形如if (!cin)的bool判斷時,便會調用operator bool,其返回的結果將會作為if的判斷條件。 於是當cin輸入流出現錯誤時,if (!cin)中的條件會被判斷為真,此時可以呼叫cin.clear()來重置流的狀態,同時呼叫cin.ignore()來清除輸入緩衝區中的內容,來消除上次輸入對下次輸入的影響,常見做法為:
if (!cin)
bool
cin
cin.clear()
cin.ignore()
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
通常這樣把第一個參數設定得足夠大,使得實際只有第二個參數'n'起作用,這樣便可以把回車前的輸入字元從輸入緩衝流中擦除。然後便嘗試進行讀取下次的輸入。
if (!cin) { cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); continue; }
cin是輸入流,!cin就是判斷輸入流是否正常。
!cin
在
std::basic_ios
中定義了operator bool
:所以如果對標準IO流進行形如
if (!cin)
的bool
判斷時,便會調用operator bool
,其返回的結果將會作為if的判斷條件。於是當
cin
輸入流出現錯誤時,if (!cin)
中的條件會被判斷為真,此時可以呼叫cin.clear()
來重置流的狀態,同時呼叫cin.ignore()
來清除輸入緩衝區中的內容,來消除上次輸入對下次輸入的影響,常見做法為:通常這樣把第一個參數設定得足夠大,使得實際只有第二個參數'n'起作用,這樣便可以把回車前的輸入字元從輸入緩衝流中擦除。然後便嘗試進行讀取下次的輸入。
cin
是輸入流,!cin
就是判斷輸入流是否正常。