我刚开始使用C编程,在使用for循环练习时,我提出了以下代码:
#include <stdio.h>
int main()
{
int x;
for (x=0;x=10;x=x+1)
printf("%d\n",x);
return 0;
}
当我运行代码时,我陷入无限循环。在我的C手册中,它说条件x = 10总是正确的,但我无法理解它。如果我在开头给变量x一个值0,如果for循环没有开始,或者当x的值达到10时,循环不应该停止吗?
提前致谢!
答案 0 :(得分:4)
for
循环的条件部分是错误的。你在做什么:
for (x = 0; x = 10; x = x +1) {
// Operations
}
你在这里的条件是x = 10
,这是一种矫揉造作。因此x = 10
将返回10,这也意味着true
。您的for
循环相当于:
for (x = 0; true; x = x + 1) {
// Operations
}
这就是为什么你有一个无限循环,你应该用两个等号=
的比较器替换效果运算符==
。这意味着for
将循环,而x
等于10。
编辑:正如Virgile在评论中提到的,对于第二个for
循环,x
将从0变为INT_MAX
,然后行为未定义。所以,你的代码看起来更像:
for (x = 0; true; x = 10) {
// Operations
}
答案 1 :(得分:0)
进入x
循环时,首先执行初始化部分。因此,循环初始化x
为0.
在进入循环体之前,即使是第一次,也会检查条件。在这种情况下,“条件”不会将=
与10进行比较,但将其设置为10 ,因为您使用的是==
而不是x
。
由于作为表达式的赋值在赋值后具有变量的值,因此条件表达式的值为10,因为这是分配给Name ID City
John 1 New York
Tom 2 Vancouver
Ash 3
Chris 4 Oakland
的值。因为此值不为零,所以它的计算结果为true,并且始终为。
答案 2 :(得分:0)
您要做的是,您在此行中隐含地将int
转换为bool
:
for (x=0;x=10;x=x+1)
^^^^
此处,x=10;
结果true
因此,每当您使用10
赋值运算符时,它都会打印=
。
for(int x=0;true;x=x+1)
你可以做些什么来维持循环?
for (x=0;x!=10;x=x+1)
for (x=0;x==10;x=x+1)
for (x=0;x<10;x=x+1)
答案 3 :(得分:0)
这里的问题是,仔细看看条件部分(2),在这个x = 10中,意思是它只是将值10赋给x,并且它总是返回“True”,所以没问题你有什么增量,它始终是10,因此无限循环。