在我大学今天的讲座中,我们得到了这个:
输入: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)
现在 x
设置为零,但您已经检查了 x
的previous 值,该值尚未为零 然后。所以你会再次进入循环:
sum += 0; // the current value of x
count++; // one summand more
并且在后续循环运行中检查循环条件时才发现x
为零。
换句话说,在第二种变体中,您将零算作附加加数。
关于c++ - 混淆 while(cin >> x && x != 0) (当 int x = 0 时)与 while(x != 0 && cin >> x ) (当 int x = 1 时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119572/