C语言中的赋值与条件签入

C语言中的赋值与条件签入,c,if-statement,conditional-statements,operator-precedence,C,If Statement,Conditional Statements,Operator Precedence,我遇到了下面这个程序,我不理解它的输出 有人能解释一下吗 #include <stdio.h> int main() { int i=1,j=1; for(;j;printf("%d %d\n",i,j)) j=i++ <=5; return 0; } 你的问题可以简化如下 #include <stdio.h> int main() { int i=1,j=1; while(j) { j = (i++ <=5);

我遇到了下面这个程序,我不理解它的输出

有人能解释一下吗

#include <stdio.h>

int main()
{
  int i=1,j=1;
  for(;j;printf("%d %d\n",i,j))
  j=i++ <=5;
  return 0;
}
你的问题可以简化如下

#include <stdio.h>
int main()
{
  int i=1,j=1;
  while(j) {   
    j = (i++ <=5);
    printf("%d %d\n",i,j);
  }
  return 0;
}

由于Ajay已经给出了原始代码的替代代码,为了方便起见,我将在下面复制粘贴它

#include <stdio.h>

int main()
{
  int i=1,j=1;
  while(j) {   
    j = (i++ <=5);
    printf("%d %d\n",i,j);
  }
  return 0;
}
现在,让我们看看while循环的执行情况


i=1,j=1,j为真,在循环中,j=1以下语句:

j=i++ <=5;
for循环的语法:

初始化语句只执行一次。然后,对检查条件进行评估。如果条件为true非零,则执行for循环体中的代码并更新更新表达式。如果条件为false 0,则for循环终止

在代码中

j=1,则条件变为真,并进入for循环体。然后,检查
j=i++可以用以下方式表示:

#include <stdio.h>
int main()
{
  int i,j;
  for(i=1,j=1;j!=0;){
    j=i++ <=5;
    printf("%d %d\n",i,j);
  }
  return 0;
}
这里,按照for循环的约定

i&j初始化为1 检查条件是否为j!=0 仅供参考,在调试器中单步执行这个非常短的程序会告诉您有关其行为的新信息。调试器可以非常强大地理解某些东西是如何工作的,而不仅仅是找出某些东西是如何损坏的
j=i++ <=5;
j = i <= 5;
++i;
for (initialization Statement; check condition; increment/decrements operation)
{
       // codes 
}
#include <stdio.h>
int main()
{
  int i,j;
  for(i=1,j=1;j!=0;){
    j=i++ <=5;
    printf("%d %d\n",i,j);
  }
  return 0;
}