为什么关系运算符意思相同时结果不同?

Why does results are different when relational operators means the same?

为了清楚起见,让我们考虑以下程序:

#include <iostream>

int main(void) {
    short int i; // declaration
    short int value;
    short int sum;

    i = value = sum = 0; // initialization

    std::cout << "Enter a value: ";
    std::cin >> value;

    while (i != value) { // ### here's the confusion ###
        sum += i;
        i++;
    }

    std::cout << "Total sum: " << sum << std::endl;

    return 0;
}

while (i != value),当给出这个表达式时,结果显示Total sum: 45,而如果我们输入while (i <= value),结果显示Total sum: 55。 (例如输入 10

这里,疑惑的是,什么时候在循环中使用!=<=>=操作,有什么具体的条件吗?

根据TutorialsPoint's Operators Reference

预计输出没有差异,但有些地方被误解了。

while( i <= value) 

最后一次迭代是 i == value。有

while ( i != value) 

循环体在i == value时不会执行。这就是您观察到差异的原因。

这是学习如何使用调试器的好机会。 And/Or 意识到你的例子已经太复杂了,无法直接看到发生了什么。使用

你会更容易发现差异
int i = 0;
int value = 5;
while ( i != value) {
    std::cout << i << " ";
}
i = 0;
while ( i <= value) {
    std::cout << i << " ";
}

这个while循环

while (i != value)

不包括 i 等于 value 时的迭代,因为在这种情况下,条件 i != value 的计算结果为 false。

这个while循环

while (i <= value)

包括 i 等于 value 时的迭代,因为在这种情况下,条件 i <= value 的计算结果为真。

其实第一个条件可以改写成下面的方式(前提是一开始i小于value)

while ( i < value )

现在将其与第二个循环中的条件进行比较,后者又可以重写为

while ( i < value || i == value )

那就是你有两个不同的条件。