1 回答

TA貢獻883條經驗 獲得超454個贊
我覺得這幾行代碼有問題。
不過,我先說下關于 cin 的東西吧:
你輸入的內容都在輸入流中。cin >> 會讀取輸入流中的內容并存入后面的變量中,當然是按照變量的類型來格式化輸入流中的內容。那么如果類型不匹配呢???
比如你這里?cin?>>?temp 需要存入浮點類型的 tmp,可你輸入的不是數字,這會怎么樣?
這會發生錯誤,cin 會在內部記錄錯誤狀態。一旦出錯就無法再使用 cin 來讀取輸入了。錯誤狀態可以通過調用 cin.clear() 來清除。? 而且?cin 的狀態默認可以作條件判斷用。
if?(!cin) 這里就是判斷 cin 是否出錯。cin 錯誤時相當于 false,所以當 cin 出錯時會執行 if 中語句。
還有一點要說,當讀取輸入時出錯,那些不正確的輸入會原封不動地留在輸入流中。
還用 cin >> tmp 舉例。如果你輸入 123回車,那沒問題,123?被 cin 從輸入流中讀取走了(并存入123.0到tmp)。 可如果你輸入 ab回車,這就出錯了! 但是 'a' 'b' '\n' 卻會原封不動流在輸入流中。
那么一般處理輸入出錯可以這樣:
先清除掉 cin 的錯誤狀態,保證可繼續使用 cin 讀取:調用 cin.clear() 即可。
再處理掉輸入流中留下的不正確的輸入:這個代碼里用循環調用 cin.get() 的方式來讀取走它們。 解釋一下,cin.get() 可以讀取走輸入流中的任意字符,并且返回讀到的值。所以循環用 get() 來讀...直到'\n' 就可以清掉輸入流中上次回車之前的內容。
那么這幾行代碼應該就是處理輸入出錯的情形的。如果你輸入沒出錯,就不會執行這個 if,所以你沒看到對結果有影響。
但是!之所以說“應該”是因為我覺得它邏輯上有問題!?
你可以對照我上面說的錯誤處理方式,看看這幾行代碼是不是無法實現這個目的?
- 1 回答
- 0 關注
- 1390 瀏覽
添加回答
舉報