亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

兩個cin.get(); 和return i;(加粗部分)是什么作用?懇請回答,必采納

兩個cin.get(); 和return i;(加粗部分)是什么作用?懇請回答,必采納

C++
xungeer29 2017-10-11 16:12:49
#include <iostream>const int Max = 5;int fill_array(double ar[], int limit);void show_array(const double ar[], int n);? // don't change datavoid revalue(double r, double ar[], int n);int main(){using namespace std;double properties[Max];int size = fill_array(properties, Max);show_array(properties, size);if (size > 0){cout << "Enter revaluation factor: ";double factor;while (!(cin >> factor))??? // bad input{cin.clear();while (cin.get() != '\n')continue;cout << "Bad input;Please enter a number: ";}revalue(factor, properties, size);show_array(properties, size);}cout << "Done.\n";cin.get(); cin.get(); return 0;}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;}// the following function can use, but not alter, // the array whose address is arvoid show_array(const double ar[], int n){using namespace std;for (int i = 0; i < n; i++){cout << "Property #" << (i + 1) << ": $";cout << ar[i] << endl; } }// multiplies each element of ar[] by rvoid revalue(double r, double ar[], int n){for (int i = 0; i < n; i++)ar[i] *= r;}
查看完整描述

2 回答

已采納
?
onemoo

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(); 來等待用戶隨便按個鍵再退出。

查看完整回答
1 反對 回復 2017-10-11
?
onemoo

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;
}

這樣合理縮進看代碼更容易,也方便用行號來指出代碼位置。

查看完整回答
反對 回復 2017-10-11
  • 2 回答
  • 0 關注
  • 1951 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號