第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調(diào)用函數(shù)實現(xiàn)輸入成績求平均,有幾行代碼看不懂,求指教

調(diào)用函數(shù)實現(xiàn)輸入成績求平均,有幾行代碼看不懂,求指教

C C++
xungeer29 2017-10-18 10:38:34
#include<iostream> using?namespace?std; const?int?max?=?10; int?grade_in(double?grade[],int?limit); void?show(const?double?grade[],int?n); double?grade_av(const?double?grade[],int?n); int?main() { ?double?scores[max]; ?int?size=grade_in(scores,max); ?show(scores,size); ?if?(size?>?0) ?{ ??cout?<<?"Average?Grade?=?" ???<<?grade_av(scores,?size)?<<?endl; ?} ?return?0; } int?grade_in(double?grade[],int?limit) { ?double?temp; ?int?i?=?0; ?cout?<<?"Enter?your?grade(enter?a?negetive?to?end)"?<<?endl; ?for?(i?=?0;?i?<?limit;?i++) ?{ ??cout?<<?"Enter?your?grade?#"?<<?i?+?1?<<?"?:?"?<<?endl; ??cin?>>?temp; ??if?(!cin)???????????????????// ??{??????????????????????????// ???cin.clear();??????????????//這幾句的作用是什么?刪掉對程序運行結(jié)果沒有影響 ???while?(cin.get()?!=?'\n')// ????continue;???????????????// ???cout?<<?"Bad?input;enter?a?number:?"; ???break; ??} ??if?(temp?<?0) ???break; ??grade[i]?=?temp; ?} ?return?i; } void?show(const?double?grade[],?int?n) { ?for?(int?i?=?0;?i?<?n;?i++) ?{ ??cout?<<?"Score?#"?<<?i?+?1?<<?"?:?"?<<?grade[i]?<<?endl; ?} } double?grade_av(const?double?grade[],?int?n) { ?double?sum=0; ?int?i?=?0; ?for?(i?=?0;?i?<?n;?i++) ?{ ??sum?+=?grade[i]; ?} ?double?av; ?av?=?sum?/?n; ?return?av; }
查看完整描述

1 回答

?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

我覺得這幾行代碼有問題。

不過,我先說下關(guān)于 cin 的東西吧:

你輸入的內(nèi)容都在輸入流中。cin >> 會讀取輸入流中的內(nèi)容并存入后面的變量中,當然是按照變量的類型來格式化輸入流中的內(nèi)容。那么如果類型不匹配呢???

比如你這里?cin?>>?temp 需要存入浮點類型的 tmp,可你輸入的不是數(shù)字,這會怎么樣?

這會發(fā)生錯誤,cin 會在內(nèi)部記錄錯誤狀態(tài)。一旦出錯就無法再使用 cin 來讀取輸入了。錯誤狀態(tài)可以通過調(diào)用 cin.clear() 來清除。? 而且?cin 的狀態(tài)默認可以作條件判斷用。

if?(!cin) 這里就是判斷 cin 是否出錯。cin 錯誤時相當于 false,所以當 cin 出錯時會執(zhí)行 if 中語句。

還有一點要說,當讀取輸入時出錯,那些不正確的輸入會原封不動地留在輸入流中

還用 cin >> tmp 舉例。如果你輸入 123回車,那沒問題,123?被 cin 從輸入流中讀取走了(并存入123.0到tmp)。 可如果你輸入 ab回車,這就出錯了! 但是 'a' 'b' '\n' 卻會原封不動流在輸入流中


那么一般處理輸入出錯可以這樣:

先清除掉 cin 的錯誤狀態(tài),保證可繼續(xù)使用 cin 讀?。赫{(diào)用 cin.clear() 即可。

再處理掉輸入流中留下的不正確的輸入:這個代碼里用循環(huán)調(diào)用 cin.get() 的方式來讀取走它們。 解釋一下,cin.get() 可以讀取走輸入流中的任意字符,并且返回讀到的值。所以循環(huán)用 get() 來讀...直到'\n' 就可以清掉輸入流中上次回車之前的內(nèi)容。


那么這幾行代碼應(yīng)該就是處理輸入出錯的情形的。如果你輸入沒出錯,就不會執(zhí)行這個 if,所以你沒看到對結(jié)果有影響。

但是!之所以說“應(yīng)該”是因為我覺得它邏輯上有問題!?

你可以對照我上面說的錯誤處理方式,看看這幾行代碼是不是無法實現(xiàn)這個目的?

查看完整回答
反對 回復(fù) 2017-10-20
  • 1 回答
  • 0 關(guān)注
  • 1395 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號