无意的无限'for'循环

时间:2016-07-28 12:20:20

标签: c

我刚开始使用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时,循环不应该停止吗?

提前致谢!

4 个答案:

答案 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)

你可以做些什么来维持循环?

答案 3 :(得分:0)

这里的问题是,仔细看看条件部分(2),在这个x = 10中,意思是它只是将值10赋给x,并且它总是返回“True”,所以没问题你有什么增量,它始终是10,因此无限循环。