2 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
看?fill_array 函數(shù)的邏輯。在 return i 前的那個(gè) for 循環(huán)就是試圖向數(shù)組的 [0, limit) 范圍輸入數(shù)據(jù)。i 作為每一次輸入的數(shù)組位置下標(biāo),那么最終 i 就標(biāo)志著一共輸入了多少個(gè)數(shù)字,顯然這個(gè)函數(shù)打算返回這個(gè)值。
為什么要返回這個(gè)值?? 這個(gè)函數(shù)意圖輸入 limit 個(gè)數(shù),但是如果中途出錯(cuò)退出則實(shí)際沒(méi)有輸入 limit 個(gè)數(shù)字,所以返回 i 是為了告訴調(diào)用者這個(gè)函數(shù)最終輸入了多少個(gè)數(shù)。
至于那兩個(gè)?cin.get();。 這個(gè) get() 會(huì)從輸入流中讀一個(gè)字符,但這個(gè)代碼又沒(méi)有用到這個(gè)字符——這樣的代碼一般有兩個(gè)目的:要么就是為了拿走(或者說(shuō)消耗掉)輸入流中的下一個(gè)字符;要么就是為了等用戶按個(gè)鍵。 我猜這里的兩個(gè) get 正是這兩個(gè)目的:
之前的代碼讀取輸入之后會(huì)在輸入流中留下?lián)Q行符,如果每次都成功讀取則中間的換行符是會(huì)被忽略掉的,而中途如果出錯(cuò)可能導(dǎo)致這個(gè)換行符被意外留下,所以第一個(gè) get 就是為了消耗掉它。
而第二個(gè) get 純粹是為了等用戶按鍵。不然這個(gè)程序直接就結(jié)束了——用戶會(huì)看到程序一閃就執(zhí)行完了,來(lái)不及看到它輸出的東西(尤其在Windows下cmd窗口中運(yùn)行時(shí),執(zhí)行完連cmd都退出了,你什么都看不到)。 所以通常用?cin.get(); 來(lái)等待用戶隨便按個(gè)鍵再退出。

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
我想再提示下,別嫌我煩哈。
下次發(fā)代碼時(shí)最好用格式化工具格式化一下,比如:
int?fill_array(double?ar[],?int?limit) { ????using?namespace?std; ????double?temp; ????int?i; ????for?(i?=?0;?i?<?limit;?i++) ????{ ????????cout?<<?"Enter?value?#"?<<?(i?+?1)?<<?":?"; ????????cin?>>?temp; ????????if?(!cin)????//?bad?input ????????{ ????????????cin.clear(); ????????????while?(cin.get()?!=?'\n') ????????????continue; ????????????cout?<<?"Bad?input;?input?process?terminated.\n"; ????????????break; ????????}?else?if?(temp?<?0)?????//?signal?to?terminate?break; ????????????ar[i]?=?temp; ????} ????return?i; }
這樣合理縮進(jìn)看代碼更容易,也方便用行號(hào)來(lái)指出代碼位置。
- 2 回答
- 0 關(guān)注
- 1947 瀏覽
添加回答
舉報(bào)