c++ - 混淆了 while(cin >> x && x != 0) (当 int x = 0) 与 while(x != 0 && cin >> x ) (当 int x = 1)
问题描述
今天在我大学的讲座中,我们得到了这样的信息:
输入:1、2、3、0、4
和两个不同的代码
(1)
int x = 0;
int sum = 0;
int count = 0;
while (cin >> x && x != 0) {
sum += x;
count++;
}
cout << static_cast<double>(sum) / count;
(2)
int x = 1;
int sum = 0;
int count = 0;
while (x != 0 && cin >> x ) {
sum += x;
count++;
}
cout << static_cast<double>(sum) / count;
我知道第一个代码以输出 2 结束,但显然第二个输出以 1.5 (6/4) 的输出结束。我的困惑是为什么在输入零后循环变为假时计数为 4 - 它是条件中 cin 的位置,初始化的 x?我很困惑。谢谢!
解决方案
当你到达零时会发生什么?
while (cin >> x && x != 0)
您读取零并发现 x 为 0。您将停止迭代。
while (x != 0 && cin >> x)
Nowx
设置为零,但您检查了的先前值x
,该值尚未为零。所以你将再次进入循环:
sum += 0; // the current value of x
count++; // one summand more
并且仅在随后的循环运行中检查循环条件时才发现它x
为零。
换句话说,在第二个变体中,您将零算作附加加数。
推荐阅读
- javascript - Angularjs ng-repeat 过滤器无法与输入和 ng-model 一起正常工作
- javascript - 使用 XPath 包含与 querySelectorAll
- spring - 如何让用户使用模型对象在 Spring MVC 中下载多个文件?
- android - 创建camera2会话后如何添加SurfaceView的多个表面
- eclipse - 如何使 Eclipse 中的标记注释扩展到编辑器的整个宽度?
- python - 以秒计算时差
- mongodb - MongoDB 副本集主要关闭 - Java 驱动程序永远等待
- python - Django:ERR_TOO_MANY_REDIRECTS
- javascript - 将交互式网格列上的值设置为另一列
- python - 使用 beautifulsoup 时缺少标签