1 回答

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