为什么输出是 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
#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