我正在试验在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。有人可以向我解释为什么并指向一些更清楚解释的网站吗?提前谢谢。
答案 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,则循环将停止执行。