【问题标题】:Usage of printf() function in for loopfor循环中printf()函数的使用
【发布时间】:2018-06-30 07:50:23
【问题描述】:
#include<stdio.h>
int main()
{
    int x=1,y=1;
    for(;y&x<6;printf("%d %d\n",x,y++))
     x++;
}

这里我期望输出如下:

2 1
3 2
4 3
5 4
6 5

但我得到了输出

2 1

【问题讨论】:

  • y&amp;x&lt;6 - 循环只会执行一次。
  • 请注意&amp; 是按位二进制和运算符。如果需要做布尔 AND 运算符,则改为&amp;&amp;

标签: c for-loop printf increment


【解决方案1】:

因为&lt; 的优先级高于&amp;from here

所以在第二次迭代中y=2x=1x&lt;6 变为 true - 结果为 1ANDed 与 y 时,结果变为 0。所以它停止了。 y&lt;x&amp;6 等价于y&amp;(x&lt;6)

向您解释 AND 的工作原理:-(以 6 位显示 - 但逻辑与 sizeof(int)*8 bits 相同)。

      000010
  AND 000001
   ----------
      000000

【讨论】:

  • 非常感谢大家..我对优先级和按位与,逻辑与..现在很清楚@coderredoc
  • @Aksh.:很高兴它对您有所帮助,您对此表示赞赏。一切顺利。
【解决方案2】:

您是否要检查 y 和 x 是否都小于 6? 如果是这样,您应该使用 (y&lt;6)&amp;&amp;(x&lt;6) 而不是 y&amp;x&lt;6

【讨论】:

    【解决方案3】:
    #include<stdio.h>
    int main()
    {
    int x=1,y=1;
    for(;y<6&x<6;printf("%d%d_",x,y++))
     x++;
    }
    

    试试这个

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案4】:

    我推荐

    #include<stdio.h>
    int main()
    {
        int x,y;
        for(x = 1, y = 1; (y & x)<6;printf("%d %d\n",x,y++));
            x++;
        return 0;
    } 
    

    因为正如@coderredoc 所指出的,&gt; 的优先级高于&amp;

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多