首页 > 解决方案 > 混淆了 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?我很困惑。谢谢!

标签: c++loopswhile-loopdo-while

解决方案


当你到达零时会发生什么?

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为零。

换句话说,在第二个变体中,您将零算作附加加数。


推荐阅读