for循环中的条件

sto*_*obe 5 c for-loop

我正在试验什么可以放入C中的for循环声明以及如何使用它.我尝试了以下方法:

#include <stdio.h>

int stupid(int a)
{
        if(a==3) return 1;
        else return 3;
}

int main(void)
{
        int i,j;
        for(i=0;stupid(i)==3,i<10;i++) printf("%d\n",i);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它,它只是打印从1到10的号码,如果我把&&代替昏迷愚蠢的(我)== 3之间,且i <10,则程序只是打印数字0到3,为什么呢?我真的不明白这是如何工作的,我期待循环传递所有数字并"跳过"3,但继续到10,这不是真正的hapenning.有人可以向我解释为什么并指向一些更清楚解释的网站吗?先感谢您.

And*_*per 8

for循环中的第二个子句(在您的情况下stupid(i)==3,i<10)是在循环体的每个条目之前计算的条件.如果它计算到true那么循环体被执行.如果它计算到false那么循环结束并且在循环体之后继续执行.

使用逗号(stupid(i)==3,i<10),代码进行求值stupid(i)==3,忘记结果,然后进行求值i<10,并将该结果用于循环条件.所以你得到的数字从0到9.

stupid(i)==3 && i<10true只有当表达式的两个部分都为真时才会求值,所以当when 为false 时i=3,stupid(i)==3循环退出.