为什么输出是 321 而不是 212?

Why is the output 321 instead of 212?

#include <stdio.h> 

int main()
{
  int i;
  int j;
  int k;
 
  for(i = 1, j = 0, k = 3 ; i <= 5, j <= 6, k > 1 ;i++, j++, k--);
  {
    printf("%d%d%d", i, j, k);
  }
 }

为什么这个程序打印的是 321 而不是 212? 我执行程序时得到321,但我认为它应该是212。我不明白为什么它打印321。

那是因为在 for 循环的末尾有一个分号,所以代码基本上是这样运行的:

// first you increment i,j and decrement k until k is 1, so twice
for(i = 1, j = 0, k = 3 ; i <= 5, j <= 6, k > 1 ;i++, j++, k--) {}
// then you print the values
printf("%d%d%d", i, j, k);

您有 2 个错误。

第一个已经提到,你的编译器也应该报告。 for 循环后有一个分号。

二是你的情况比较奇怪:i <= 5, j <= 6, k > 1
关系运算符的优先级高于逗号运算符。这意味着此条件与 (i <= 5), (j <= 6), (k > 1) 相同,而 (i <= 5), (j <= 6), (k > 1) 又与 k>1.
相同 如果要使所有关系操作数的计算结果为 true,则必须添加逻辑运算符:i <= 5 && j <= 6 && k > 1