2014-09-06 67 views
1

我有問題。假設代碼如下:如果在輸入int時輸入一個單詞會發生什麼情況?

int a; 
    cin>>a; 

如果我輸入一個單詞而不是一個整數會發生什麼? a會給予什麼價值?

在此先感謝。

+2

....你有沒有嘗試過,看看? – 2014-09-06 20:39:13

+1

如果您擔心這種情況,只需將所有內容輸入爲字符串,然後將其轉換爲所需的類型即可。 – Tracer 2014-09-06 20:40:08

+0

@KyleStrand嗨,我試過了,結果爲0.我想知道更詳細的結果背後的機制;) – 2014-09-06 20:44:24

回答

4

在使用正在讀取的值之前,您需要檢查讀取操作的結果。 >>操作符返回對正在讀取的流的引用,並且該流包含狀態信息以指示上次操作是成功還是失敗。如果失敗,被讀取的變量的值是不確定的,所以不要使用它。

嘗試這種情況:

int a; 
if (cin >> a) // <-- same as: if (!cin.operator>>(a).fail()) 
{ 
    // read successful, use the int as needed... 
} 
else 
{ 
    // read failed, do not use the int... 
} 
+0

正確,你忘了給問題的答案 – 4pie0 2014-09-06 20:50:14

+0

@ 0d0a:我確實回答了「什麼會發生「問題 - '>>'會失敗。我沒有回答「將給予什麼價值」的問題。我現在補充說。 – 2014-09-06 21:46:54

1

當用戶輸入不能被轉換到可變的類型,CIN >>離開變量的值不變。你看到變量看起來像未初始化的,這是零。所以當你輸入一個單詞而不是一個整數時,變量的值是不變的,並且保持未初始化。

+0

POD類型的局部變量未被初始化。它是零的事實是隨機行爲。這將是任何數據已經佔用了變量正在使用的堆棧內存。 – 2014-09-06 21:48:36

0

這不是問題。

在C++中,WORD通常是int的子集。

所以完全WORD valuerange容易被表示爲int

隨便看看這裏:

WORD datatype in windows environments(這只是兩個字節的值在這裏,int在比較寬的4個字節在大多數情況下)

,當然還有: Word size in linux

當然,這個答案是有點tongue舌

相關問題