2016-02-05 85 views
-2

我得到這樣一個int如下:std :: cin如何工作?

int num; 
cin >> num; 

我通過以下操作得到的字符串:

string word; 
cin >> word; 

我的問題是:cin如何在內部轉換?如果我輸入了意想不到的東西,它會輸出一個錯誤嗎?例如:「ɔoolʇǝxʇƃǝuǝɹɐʇoɹoulıuǝ」。 cin使用什麼保護措施?

我是新的C++

+5

您是否閱讀過任何[documentation](http://en.cppreference.com/w/cpp/io/basic_istream)? – NathanOliver

+4

它對您指定的數據類型有重載。 –

+1

不要忘記看語言標籤信息。他們經常有參考書目和常見問題列表。非常有用的東西! http://stackoverflow.com/tags/c%2b%2b/info –

回答

2

注意>>是一個操作符。 C++提供了定義爲任何內置運算符提供功能的函數的功能。 (請注意,不能創建語言中尚不存在的新操作員。)在此特定情況下,>>操作員已被超載以便與cinintstring一起使用。這些功能然後執行轉換。在int版本的情況下,如果輸入無法轉換爲int,它將在cin中設置錯誤標誌。

1

std::cinstdin讀取。

此:

string word; 
cin >> word; 

將返回string,而不是一個char*。嘗試在C++中避免字符數組。

閱讀關於std::cinhere。在處理C++ IO時,還學習stringstreams是非常有用的。

+0

更準確地說,'cin'從「標準輸入」(stdin)中讀取。這可能是控制檯,但也可能是文件或其他設備,具體取決於操作員系統和用戶的重定向。 –

+0

感謝糾正我,我會編輯我的迴應。 – PhotometricStereo

1

您可能想要閱讀一本關於C++ iostreams的書。 Like the C++ book by Stroustrup who invented C++.

但是總之,一個iostream對象,像cin一樣,有goodbit,badbit,failbit和eofbit。 Look at iostate.

當cin對象什麼都不好時,它將返回false。所以,你可以這樣讀的整數:當它讀取任何不是數字或

int my_int; 
while(cin >> my_int) { 
    cout << "Received " << my_int << "\n"; 
} 

循環將退出當它到達文件的末尾。

+1

「cin對象在任何情況下都會返回false。」爲了迂迴,操作符>>將返回流本身,而不是布爾值。幸運的是,根據goodbit是否設置,流有(最終)轉換爲「bool」。 – AndyG