Inifinite循环使变量变为0

时间:2015-06-30 01:54:25

标签: 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;
}

正如你所看到的那样,它是一个无限循环,当逻辑跟踪时,它应该显示20,40,80等等。 但它总是显示0。 在每个循环周期后添加系统(“暂停”)时,它显示正确的值,但如上所示(无限循环)时,它显示为零。 有什么想法吗?

3 个答案:

答案 0 :(得分:11)

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

c = 1
c *= 2; c = 2
c++; c = 3
c -= 2; c = 1 <-- infinite

答案 1 :(得分:4)

以下是我对你的问题的回答:

  1. 为什么你会无限循环?

    awesomeyi确实在上面回答了你,因为while循环的条件总是正确的,所以它永远不会结束。

  2. 为什么X总是等于0?

  3. 请注意X varable,在结束一个循环x + = x * c后它的值会增加。因为你处于无限循环中,x的值将永远增加,直到大于整数变量的有限值。然后,该值将设置为零。运行代码时请查看我的输出。 enter image description here

答案 2 :(得分:1)

删除暂停不会导致始终显示为零。它只是快速打印输出,你可以在底部看到零。重新添加暂停,然后单击大约30-40次迭代,看看它是否有助于您了解正在发生的事情。