【问题标题】:Are multiple conditions allowed in a for loop?for循环中是否允许多个条件?
【发布时间】:2013-07-14 10:51:30
【问题描述】:

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

#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 代码?

【问题讨论】:

  • 是的,我当然可以,但是当我在网站上找到上面的代码时我傻眼了:geeksforgeeks.org/output-of-c-program-set-22
  • C 标准不同,例如C89 和 C99。除此之外,C 语言编译器的不同实现也存在差异。你的代码是正确的。
  • 这段代码是正确的——comma 运算符计算其操作数,其结果是最后一个操作数。例如int a = 1,2; //here a = 2
  • 建议大家不要看Let Us C,看看这个The Definitive C Book Guide and List
  • @NikunjBanka 你没有理由对你找到的代码 sn-p 感到目瞪口呆,也没有理由在这里发布。您所要做的就是费心阅读该页面上的代码......特别是代码描述如下:当两个表达式用逗号分隔时,首先执行第一个表达式(i

标签: c for-loop


【解决方案1】:

条件

i < p, j < q

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

如果您想测试多个条件,请改用逻辑 AND 运算符 &amp;&amp;

i < p && j < q

【讨论】:

  • 其实根据编辑部分你需要在C OP的confunction中添加关于,的操作符是从那里来的
  • 是的,我认为足够了,直到 OP 不要提出交叉问题或他对此的怀疑。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    如果您想同时测试这两个条件,请使用&amp;&amp; 运算符。

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

    i &lt; pj &lt; q 都被计算,但只有第二个表达式 j &lt; q 的结果被 for 循环检查。

    【讨论】:

      【解决方案4】:
      for(i = 0, j = 0; i < p && j < q; i++, j++){
      

      【讨论】:

      • 不,i &lt; p, j &lt; qi &lt; p &amp;&amp; j &lt; q 不同,请阅读 Simonc 的回答
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2017-05-13
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 2018-06-26
        • 2018-06-04
        • 1970-01-01
        • 2011-09-02
        相关资源
        最近更新 更多