2010-03-16 54 views
4

這似乎是不可思議:C++ CIN問題

int main(int argc, char* argv[]) { 

    cout << "function main() .." << '\n'; 

    char ch = 0; 
    double number_value=1.1; 

    cin >> ch; 
    cin.putback(ch); 

    cin >> number_value; 
    cout << "1 .. " << " " << cin.good() << " " << number_value << '\n'; 
    cin >> number_value; 
    cout << "2 .. " << " " << cin.good() << " " << number_value << '\n'; 

    return 0; 

} 

如果我輸入以下內容:

7a 1 

我得到如下:

函數main()..

7a 1 
1 .. 1 7 
2 .. 0 0 

我明白了:

1 .. 1 7 

但爲什麼變量NUMBER_VALUE爲0 cin.good()顯示故障所以什麼事都不會讀,並從以前的分配在NUMBER_VALUE值將保持。我期望值爲7.

+0

您可以使用std :: boolalpha將這些1和0轉換爲true和false。 – 2010-03-16 05:17:30

+1

請注意,'cin.good()'與'bool(cin)'不一樣,在檢查提取成功時你應該更喜歡後者。 'if(cin >> var)'這個常見的習慣用法也是這樣。 – 2010-03-16 05:22:37

+0

你使用什麼編譯器? – 2010-03-16 05:32:28

回答

2

這就是我所期望的。隨着我有得心應手的編譯器,輸出看起來是這樣的:

function main() .. 
7a 
1 .. 1 7 
2 .. 0 7 

您可能已經發現你的編譯器的標準庫中的錯誤。

+0

其次用MinGW輸出... 函數main()\ n 7a 1 \ n 1 .. 1 7 \ n 2 .. 0 7 \ n – 2010-03-16 05:14:12

+0

不需要改變值:22.2.2.1.2/1「如果發生錯誤,val將保持不變;否則將設置爲結果值。」 – 2010-03-16 05:21:31