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 关注
- 1864 浏览
添加回答
举报