5

以下代码运行没有给出任何错误或警告

#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 循环的测试表达式中是否允许使用多个表达式?

编辑:我当然可以加入这两个表达式,但是当我在这个网站上找到上面的代码时我傻眼了。我的问题是,这是否是有效的 C 代码?

4

5 回答 5

16

条件

i < p, j < q

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

如果要测试多个条件,请改用逻辑 AND 运算&&

i < p && j < q
于 2013-07-14T10:54:33.117 回答
7

您可以使用布尔值和 (&&) 将它们链接在一起

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

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

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

于 2013-07-14T10:52:54.900 回答
3

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

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

i < p和都j < q被计算,但只有第二个表达式的结果j < q被 for 循环检查。

于 2013-07-14T10:59:19.810 回答
2
for(i = 0, j = 0; i < p && j < q; i++, j++){
于 2013-07-14T10:54:37.920 回答
1

甚至我也读过 Yashwant Kanetkar 先生的那本书。它确实表示 for 循环中只允许一个条件,但是您可以通过使用逻辑运算符连接它们来在 for 循环中添加多个条件。在我很久以前读过的其他书中,说只允许一个条件。

于 2014-03-15T17:31:03.750 回答