c编程新手。这是来自作业的问题。任何人都可以告诉我为什么这个代码仍然输出两列5和2,即使我小于j。
#include <stdio.h>
int main(void) {
int i = 0, j = 5;
for (i > j; i + j == 5; j < 2) {
printf("Two columns\n");
i = 5;
j = 2;
}
printf(" %d %d\n", i, j);
return 0;
}
答案 0 :(得分:4)
以下是按顺序执行的步骤:
int i = 0, j = 5;
局部变量i
和j
已定义并分别初始化为0
和5
for (i > j; i + j == 5; j < 2) {
:
i > j
,其结果为false(0)并且没有副作用,结果被忽略,因此可能被编译器完全省略。i + j == 5
,其计算结果为true(1),以便执行for
循环的主体。printf("Two columns\n");
输出Two columns
和换行符。i = 5;
将i
设为5。j = 2;
将j
设置为2。}
然后评估增量表达式:j < 2
,其计算结果为false但没有副作用,结果将被忽略。i + j == 5
现在评估为false(0),因为5 + 2
与5
不同。 printf(" %d %d\n", i, j);
会在您观察时输出数字5
和2
以及换行符。
return 0;
main
返回值0
,这是一个成功的退出状态。这段代码非常愚蠢且故意误导,因为它在for
语句标题的所有3个部分中都有测试表达式。只有中间的一个是测试表达式,第一个和最后一个表达式仅用于副作用,例如初始化和递增循环计数器。
答案 1 :(得分:0)
for (i > j; i + j == 5; j < 2)
i > j
没有意义i + j == 5
条件变为true
并针对循环体执行,其中分别为i
和j
5
和2
分配了新值。 j < 2
变为false
。这也没有意义。i+j == 5
变为假,因为我是5,而j是2.所以,7 == 5
变为假。因此,您的代码输出为5和2。