对于(i=0;1;i++)在C?

li9yvcax  于 2023-04-29  发布在  其他
关注(0)|答案(5)|浏览(227)

for (i=0;1;i++)到底做了什么for loop什么时候结束在达到i=1?什么时候会发生?(在互联网和C书(如何编程,Deitel&Deitel)中寻找这种类型的循环,没有任何结果。..)

int i;
    for (i=0;1;i++)
        {
        // Some code starts
        // ...
        // Some code ends
        if (*Something Happens*)
            break;
        }

P.S.为了便于理解,我简化了原始代码。

9lowa7mx

9lowa7mx1#

因为在C语言中,int可以被解释为布尔值,使用零/非零规则(零意味着“假”,其他任何东西都意味着“真”),循环将继续,直到到达循环体中的break语句。
您可以将相同的循环重写为

for (i=0; ;i++)

因为在中间没有条件的情况下,循环将继续,直到break

km0tfn4u

km0tfn4u2#

for (i=0;1;i++)到底做了什么

for (i=0;1;i++)

是一个无限循环,因为1(非零值)的计算结果是true,因此在这种情况下,for的条件表达式将始终变为true
for循环什么时候结束
声明

if (fgets(words[i],max_line_len-1,fp)==NULL)
        break;

将在条件为if中的true时终止循环。
在达到i=1的值之后?
不我在上面解释过了
什么时候会发生?
i = 1将在第二次迭代中发生。但这不会终止循环。

siotufzp

siotufzp3#

下面的片段是完全相同的

for (i=0; 1; i++) {
    // some code
}

i = 0;
while (true) {
    // some code
    i++;
}

您编写的代码将以语句break结束,即代码段中的下面代码

if (fgets(words[i],max_line_len-1,fp)==NULL)
    break; // this will jump out of the loop
lzfw57am

lzfw57am4#

这是一个无限循环!你应该使用break,并在某些条件下退出循环。

5fjcxozz

5fjcxozz5#

for (i=0;1;i++)是无限循环,相当于c++中的while(1)或while(true)。
因为任何非零变量在c中都会被解释为布尔变量的true。然而

if (fgets(words[i],max_line_len-1,fp)==NULL)
            break;

将保证在读取文件末尾时退出循环。
while (1)for (i=0;1;i++)是一种类型的循环,它必须在循环内部中断以确保没有无限循环。我认为这种风格的一个优点将使whilefor的格式看起来统一。

相关问题