for循环中是否允许多个条件?

时间:2013-07-14 10:51:30

标签: c for-loop

以下代码运行时不会出现任何错误或警告

#include<stdio.h>

int main(){
    int i, j;
    int p = 0, q = 2;
    for(i = 0, j = 0; i < p, j < q; i++, j++){
      printf("HelloWorld\n");
    }
    return 0;
}

但是,书Let Us C(Yashwant Kanetkar)表示在for循环的测试表达式中只允许使用一个表达式。(参见本书第115页)。

我不确定标准。 for循环的测试表达式中是否允许使用多个表达式?

编辑:我当然可以加入这两个表达式但是当我在website上找到上面的代码时,我感到很沮丧。我的问题是,这是否是有效的C代码?

5 个答案:

答案 0 :(得分:7)

条件

i < p, j < q

是允许的,但可能不是预期的,因为它会丢弃第一个表达式的结果并仅返回j < q的结果。 comma operator计算逗号左边的表达式,丢弃它然后评估右边的表达式并返回它。

如果要测试多个条件,请使用逻辑AND运算符&&代替

i < p && j < q

答案 1 :(得分:5)

您可以使用布尔和(&amp;&amp;)

将它们链接在一起
for(i = 0, j = 0; (i < p) && (j < q); i++, j++){

以上内容不会在循环中打印出任何内容,因为(i < p)条件会立即失败,因为i&amp; p都是相同的值(0)。

更新:您的示例有效(但很愚蠢)C,因为如果您启动i = 30,您的循环仍会执行2次,因为忽略逗号分隔列表中的第一个结果。

答案 2 :(得分:3)

如果要测试这两个条件,请使用&&运算符。

代码中发生的事情与逗号运算符,的工作方式有关。

评估i < pj < q,但只有for循环检查第二个表达式j < q的结果。

答案 3 :(得分:1)

for(i = 0, j = 0; i < p && j < q; i++, j++){

答案 4 :(得分:1)

即使我已经读过Yashwant Kanetkar先生的那本书。它确实说for循环中只允许一个条件,但是你可以通过使用逻辑运算符来连接它们来为for循环添加多个条件。在我以前读过的其他书中,说过只允许一个条件。