两个cin.get(); 和return i;(加粗部分)是什么作用?恳请回答,必采纳

#include <iostream>

const int Max = 5;

int fill_array(double ar[], int limit);

void show_array(const double ar[], int n);  // don't change data

void 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 ar

void 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 r

void revalue(double r, double ar[], int n)

{

for (int i = 0; i < n; i++)

ar[i] *= r;

}

xungeer29
浏览 1784回答 2
2回答

onemoo

看 fill_array 函数的逻辑。在 return i 前的那个 for 循环就是试图向数组的 [0, limit) 范围输入数据。i 作为每一次输入的数组位置下标,那么最终 i 就标志着一共输入了多少个数字,显然这个函数打算返回这个值。为什么要返回这个值?  这个函数意图输入 limit 个数,但是如果中途出错退出则实际没有输入 limit 个数字,所以返回 i 是为了告诉调用者这个函数最终输入了多少个数。至于那两个 cin.get();。 这个 get() 会从输入流中读一个字符,但这个代码又没有用到这个字符——这样的代码一般有两个目的:要么就是为了拿走(或者说消耗掉)输入流中的下一个字符;要么就是为了等用户按个键。 我猜这里的两个 get 正是这两个目的:之前的代码读取输入之后会在输入流中留下换行符,如果每次都成功读取则中间的换行符是会被忽略掉的,而中途如果出错可能导致这个换行符被意外留下,所以第一个 get 就是为了消耗掉它。而第二个 get 纯粹是为了等用户按键。不然这个程序直接就结束了——用户会看到程序一闪就执行完了,来不及看到它输出的东西(尤其在Windows下cmd窗口中运行时,执行完连cmd都退出了,你什么都看不到)。 所以通常用 cin.get(); 来等待用户随便按个键再退出。

onemoo

我想再提示下,别嫌我烦哈。下次发代码时最好用格式化工具格式化一下,比如: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; }这样合理缩进看代码更容易,也方便用行号来指出代码位置。
打开App,查看更多内容
随时随地看视频慕课网APP