c++ - 混淆 while(cin >> x && x != 0) (当 int x = 0 时)与 while(x != 0 && cin >> x ) (当 int x = 1 时)

标签 c++ loops while-loop do-while

在我大学今天的讲座中,我们得到了这个:

输入: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 设置为零,但您已经检查了 xprevious 值,该值尚未为零 然后。所以你会再次进入循环:

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/

相关文章:

C++嵌套循环无限重复(C++类项目)

ruby-on-rails - 在每个循环中创建动态 form_tag

python - 是否可以在代码检查完每个选项后让我的 else 语句出现?

c++ 无法清除 inputStream

bash - 如何使用陷阱终止包含来自/dev/null 的重定向馈送的ffmpeg 的while 循环?

c++ - 为什么在 C++17 中添加了 std::reduce?

c++ - 检查相同的字母是否在字符串中连续出现 3 次

c++ - 为什么提取运算符不起作用?

c++ - 在 mmap 中缓存

cocoa - 在 cocoa 中使用 while 循环创建数组