2017-07-19 66 views
0

我這似乎是多餘的我一個代號:似乎是多餘的使用CIN作爲條件與如果,而

char c; 
    cin>>c; 
    if(cin&&c=='n') 
    //do something 

我不明白引入CIN的值如果不是它總是會有TRUE價值,因爲我從來沒有遇到任何情況下(在我有限的經驗),這istream對象不構造。

同樣地,我已經看到了這個問題,以及:

 if(cin) 

請糾正我,我該怎麼錯在何處。現在人不發佈錯誤插播一部分,我已經知道了,主要部分是什麼時候流從 的ios_base ::初始化

+1

http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool –

+0

@MooingDuck所以,當一個流遇到一些錯誤:你能給我一些例子,鏈接? – Gaurav

+1

Gurav'int x,cin >> x;'帶有用戶輸入「FUBAR!」,它不能被轉換爲「int」。 'char'有點困難。 – user4581301

回答

4

std::cin失敗失敗除了是std::basic_istream<char>一個實例。由於它在條件中使用,我們感興趣的是它是bool轉換運算符。從http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

std::basic_ios::operator bool

Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail()

從文檔,很明顯,if(cin)是爲了檢查是否有cin任何錯誤。更準確地說,它說「如果cin在上次操作期間沒有遇到錯誤」

條件if(cin&&c=='n')遵循相同的原則,但也檢查輸入流提供n。換句話說,「如果cin沒有遇到錯誤並返回字符n

相關問題