for循环中的条件

时间:2010-11-26 01:02:31

标签: 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;
}

当我运行程序时,它只打印1到10的数字,如果我把&amp;&amp;而不是愚蠢的(i)== 3和i&lt; 10之间的昏迷,那么程序只打印最多3的数字。为什么?我真的不明白这是如何工作的,我期待循环传递所有数字并“跳过”3,但继续到10,这不是真正的hapenning。有人可以向我解释为什么并指向一些更清楚解释的网站吗?提前谢谢。

9 个答案:

答案 0 :(得分: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<10才会评估为true,因此当i=3时,stupid(i)==3为false,并且循环退出。

答案 1 :(得分:3)

逗号运算符在逗号之前计算部分,丢弃结果,然后在逗号之后计算部分并返回该部分。所以在你的for循环中,逗号之后的部分是i&lt; 10,这是作为for循环的条件返回的内容。这就是为什么如果你有逗号运算符,它会打印数字1到10。

如果你把&amp;&amp;操作员,它意味着&amp;&amp; amp;必须满足,否则循环终止。因此,如果i == 3,则左侧部分的计算结果为false,并且您的循环结束。

答案 2 :(得分:2)

逗号运算符计算两者,但总体上返回其第二个操作数的值。由于stupid()没有任何副作用,这意味着在这里没有太多使用,你只是在检查是否i<10

当您将其更改为&&时,两个函数必须返回true(非零)才能继续迭代。在语句评估为false的第一次传递时,for循环停止并且控制继续经过它。

答案 3 :(得分:0)

只有满足条件,for循环才会继续。如果在for循环中放置if语句以验证stupid(i)是否等于3,则for循环将继续。

答案 4 :(得分:0)

使用,运算符扩展到正在运行的每一行。最后一行应该返回一个布尔表达式,指示是否应该执行下一次迭代。在这种情况下,虽然stupid()被调用,但它只检查表达式i < 10的返回值以决定进一步执行。

答案 5 :(得分:0)

在for循环中,需要三个表达式,它们用分号分隔。

第一个是初始化程序,它在循环开始之前运行一次。它通常初始化循环变量。

第二个是条件,它在初始化程序之后运行,然后在每个后续迭代之前运行。如果为true,则运行循环语句。如果为false,则循环结束。

第三个是在每次迭代后立即运行的表达式,并且在下一次迭代之前检查条件之前。它通常通过改变循环变量来进行循环。

您的条件stupid(i)==3,i<10使用逗号运算符。逗号运算符运行每一侧,但仅返回右侧的值。 stupid(i)==3的值完全被忽略。只有当双方都是真的时,条件stupid(i)==3 && i<10才是真的。

请记住,当条件为假时,循环结束 - 迭代不会被跳过,整个循环结束。要获得所需内容,请使用

 for(i=0; i < 10; ++i) {
    if (stupid(i)==3) {
       printf("%d\n",i);
    }
 }

这将通过0-9,但如果stupid(i)不是3,则跳过代码。

答案 6 :(得分:0)

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

限制条件只能在条件成立时终止循环,而不是跳过迭代。如果您想跳过某些值,则必须在计算for()的一部分时执行此操作,或者使用if()执行此操作

i+=i==3变为3时,<{i将{1}增加到i,如果满足条件,则i==3计算为1,否则为0(并且添加0根本不会任何影响)。

答案 7 :(得分:-1)

如果使for循环计数器值为全局,并在stupid(i)== 3时将i分配给4,则可以使用此逻辑跳过3。以下是修改后的代码。我在Dev-C ++上执行它

#include <stdio.h>
int i,j;
int stupid(int a)
{
    if(a==3) 
    i=4;
    else return 3;
}

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

答案 8 :(得分:-2)

for循环中的逗号充当OR运算符。如果任一语句的计算结果为true,则循环将停止执行。