C 意外无限循环

C 意外无限循环,c,for-loop,C,For Loop,我是C语言的初学者,我正在试验for循环,我遇到了一个不应该是无限循环的无限循环,有人能帮我理解为什么它是无限循环吗 void main() { int i; for(i=1,printf("Initialization");i++ <=5,printf("\nCondition");printf("%d",i)) printf("\nInside the loop :"); } void main() { int i; for(i=1,pr

我是C语言的初学者,我正在试验
for
循环,我遇到了一个不应该是无限循环的无限循环,有人能帮我理解为什么它是无限循环吗

void main()
{
    int i;

    for(i=1,printf("Initialization");i++ <=5,printf("\nCondition");printf("%d",i))

    printf("\nInside the loop :");
}
void main()
{
    int i;

    for(i=1,printf("Intialization");printf("\nCondition"),i++<= 5;printf("%d",i))

    printf("\nInside the loop\n");
}
void main()
{
int i;

对于(i=1,printf(“初始化”);i++来说,原因是循环条件(在两个分号之间)如下所示:

i++ <=5, printf("\nCondition") // First loop
printf("\nCondition"), i++<= 5 // Second loop

i++您有两个条件记住printf返回打印的字符数,并且总是非零,因此导致无限循环

简单的逗号运算符实现操作数中的所有副作用,丢弃第一个操作数的结果,然后计算第二个操作数的结果。因此,在第一个代码段中,尽管将实现i++,c如果我们在for循环条件下编写多个条件,编译器将检查所有的条件,但是它将考虑最正确的条件来检查条件是否为真/假。
void main()
{
    int i;

    for(i=1,printf("Initialization");i++ <=5,printf("\nCondition");printf("%d",i))

    printf("\nInside the loop :");
}
void main()
{
    int i;

    for(i=1,printf("Intialization");printf("\nCondition"),i++<= 5;printf("%d",i))

    printf("\nInside the loop\n");
}

在你的第一个程序中,你写了两个条件,一个是i++,因为在这种情况下,
printf
的返回值从来都不是0?(因为你把它放在第二个条件中,这就是比较的结果)是什么让你这样写代码?我只是在尝试不同的方法来检查printf的返回值(“”)请重新考虑您的非零。@NiclasM请指出在OP的代码中您在哪里看到了
printf(“”
)。我的意思是,OP在那种情况下只有一个
printf
;它打印
“\nCondition”
,并且总是返回10,一个非零值。没有任何地方。您仍然清楚地声明“它[printf]总是返回非零”@NiclasM是的,没错-“它”(
printf
来自第一个条件)返回十个字符,因为它的参数有十个字符长。
printf()
错误时返回负值。即使OP将
stdout
重定向到文件,循环也不会在硬盘驱动器已满时结束。