我的学校书中有这段代码。
#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。 在每个循环周期后添加系统(“暂停”)时,它显示正确的值,但如上所示(无限循环)时,它显示为零。 有什么想法吗?
答案 0 :(得分:11)
c
无论如何总是1。循环变得无限。最终,由于整数溢出,X
变为0
。
c = 1
c *= 2; c = 2
c++; c = 3
c -= 2; c = 1 <-- infinite
答案 1 :(得分:4)
以下是我对你的问题的回答:
为什么你会无限循环?
awesomeyi确实在上面回答了你,因为while循环的条件总是正确的,所以它永远不会结束。
为什么X总是等于0?
请注意X varable,在结束一个循环x + = x * c后它的值会增加。因为你处于无限循环中,x的值将永远增加,直到大于整数变量的有限值。然后,该值将设置为零。运行代码时请查看我的输出。
答案 2 :(得分:1)
删除暂停不会导致始终显示为零。它只是快速打印输出,你可以在底部看到零。重新添加暂停,然后单击大约30-40次迭代,看看它是否有助于您了解正在发生的事情。