2 回答

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

TA貢獻883條經驗 獲得超454個贊
我想再提示下,別嫌我煩哈。
下次發代碼時最好用格式化工具格式化一下,比如:
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; }
這樣合理縮進看代碼更容易,也方便用行號來指出代碼位置。
- 2 回答
- 0 關注
- 1951 瀏覽
添加回答
舉報