Inifinite循环使变量变为0

Joh*_*ant 2 c++

我在学校的书中有这段代码.

#include<iostream>
using namespace std;

int main() {
  int x=10,c=1;
  while (c < 5) {
    x += x*c;
    c *= 2;
    c++;
    c -= 2;
    cout << "X=" << x<<'\n';
  }
  system("pause");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它是一个无限循环,当逻辑跟踪时,它应该显示20,40,80等等.然而,在每个循环周期后添加系统("暂停")时它总是显示0.它显示正确的值,但是当如上所示(无限循环)时,它显示为零.任何想法的原因?

yiz*_*lez 11

c无论如何总是1.循环变得无限.最终,X变得0由于整数溢出.

c = 1
c *= 2; c = 2
c++; c = 3
c -= 2; c = 1 <-- infinite
Run Code Online (Sandbox Code Playgroud)