2014-02-08 49 views
5

我剛開始學習C++(所以請原諒我爲我的noobish查詢)。下面是一些我寫作練習的代碼:當在C++中將一個字符串值賦給一個整型變量時會發生什麼?

#include<iostream> 

int main() 
{ 
    using namespace std; 

    int foo; 
    cin >> foo; 

    int bar; 

    cin >> bar; 
    cout << "foo plus bar is " << foo+bar<< endl; 
    return 0; 
} 

現在,當兩個輸入都是數字時,此代碼工作得非常好。但是當我爲第一個輸入輸入一個字符串(只是爲了看看會發生什麼)時,程序不會要求我輸入第二個輸入並且結果爲foo plus bar is 0。我想知道的是,爲什麼程序跳過我的第二個cin當我將一個字符串分配給一個整數變量。感謝你的幫助。

+0

你的'cin'永遠不會被「忽略」。在這樣的情況下,你應該將自己的想法引導到「我正在做什麼」,然後?爲什麼?「並找出你閱讀文件。小心。 –

+0

C++標準文檔在哪裏託管?我目前所擁有的只是Bjarne Stroustrup的「C++編程語言」。這是你的意思嗎? – sayantankhan

+0

例如http://cppreference.com – leemes

回答

7

流有一個內部狀態。如果輸入失敗,狀態將被設置爲指示錯誤,並且所有其他輸入都將失敗,除非該狀態被清除。

在你的情況下,你應該用零初始化foo和bar。

測試流狀態:

if(! (cin >> foo)) { 
    // Error 
} 

同樣的,酒吧

如果你已經解決了,你可以使用cin.clear()清除錯誤狀態下輸入故障。

+0

所以,即使我嘗試給foo和bar分配一個字符串,'cin'將會失敗,foo和bar會保持爲0? – sayantankhan

+0

@ Bolt64字符串仍在等待提取。錯誤狀態不會自動消失。 –

+0

我想我知道了..謝謝了很多。 :) – sayantankhan

相關問題