【发布时间】:2020-10-08 08:26:40
【问题描述】:
以下两个程序应该产生 1、2、3 的所有三个数字组合(重复)。它们在各方面都是相同的,除了循环计数器被初始化的地方
#include <stdio.h>
int main(void)
{
short i, j, k;
i = j = k = 1;
for (; i <= 3; i++) {
for (; j <= 3; j++) {
for (; k <= 3; k++)
fprintf(stdout, "%hi %hi %hi\n", i, j, k);
}
}
return 0;
}
...三个循环的计数器在它们之外被初始化的这个不会产生所需的输出。它会打印出来。
1 1 1
1 1 2
1 1 3
第二个……
#include <stdio.h>
int main(void)
{
short i, j, k;
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
for (k = 1; k <= 3; k++)
fprintf(stdout, "%hi %hi %hi\n", i, j, k);
}
}
return 0;
}
...在每个循环中初始化计数器,产生所需的输出
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3
在一本书中读到,for 循环可以用多种形式编写——所有这些形式都是相同的——并且计数器可以在 for 语句内部或外部进行初始化、递增和测试。那为什么会有不同的行为呢?
【问题讨论】: