c - 无意的无限 'for' 循环

标签 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 时,循环不是应该停止?

提前致谢!

最佳答案

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
}

这就是为什么你有一个无限循环,你应该用带有两个等号==的比较运算符来替换情感运算符=。这意味着当 x 等于 10 时,for 将循环。

编辑:正如 Virgile 在评论中提到的,对于第二个 for 循环,x 将从 0 到 INT_MAX,则行为未定义。因此,您的代码更有可能如下所示:

for (x = 0; true; x = 10) {
    // Operations
}

关于c - 无意的无限 'for' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38636191/

相关文章:

c++ - 在 OpenCV 中使用自定义相机(通过 GStreamer)

c - 为逐跳扩展 header IPv6 指定新选项?

使用链表的C Set实现内存泄漏

C 字符串程序

c++ - 将 double 类型传递给 ceil 会导致 GCC 中不同优化级别的不同值

将 ascii 码转换为整数

c++ - 警告 : comparison of distinct pointer types

c - mod C 的问题

c - 如何优化点积的 AVX 实现?

c - MIPS(或 SPIM): Loading floating point numbers