#include <stdio.h>
int main ()
{
int i;
int m = 1;
for (i = 0 ; i < m ; i++) {
printf("a");
i++;
m++;
}
return 0;
}
此程序将输出设为a
。
#include <stdio.h>
int main ()
{
int i;
int m = 1;
for (i = 0 ; i < m ; i++) {
printf("a");
i++;
m = 5;
}
return 0;
}
虽然这会将输出设为aaa
。
任何人都可以解释究竟发生了什么。
答案 0 :(得分:4)
在您的第一个程序中,您执行i++
两次,m++
一次。因此,在第一次迭代结束时,i和m的值相等(即2) - 因此在下一次迭代中i < m
条件失败,并且循环退出。
在第二种情况下,将m(停止条件)的值设置为5
,循环执行直到满足(m<5
)停止条件。
请注意,更改循环内停止条件的值通常是一种不好的做法,因为这会导致混淆,例如这样。
答案 1 :(得分:2)
要查找这些错误,逐行手动运行程序并观察变量的值是有帮助的。
第一个项目:
int i; // i = ?
int m = 1; // i = ?, m = 1
i = 0; // i = 0, m = 1
i < m // true
// first iteration
printf ("a");
i++; // i = 1, m = 1
m++; // i = 1, m = 2
i++; // i = 2, m = 2
i < m // false
您会立即看到问题是循环体中的额外i++
。
对于第二个项目:
int i; // i = ?
int m = 1; // i = ?, m = 1
i = 0; // i = 0, m = 1
i < m // true
// first iteration
printf ("a");
i++; // i = 1, m = 1
m = 5; // i = 1, m = 5
i++; // i = 2, m = 5
i < m // true
// second iteration
printf ("a");
i++; // i = 3, m = 5
m = 5; // i = 3, m = 5
i++; // i = 4, m = 5
i < m // true
// third iteration
printf ("a");
i++; // i = 5, m = 5
m = 5; // i = 5, m = 5
i++; // i = 6, m = 5
i < m // false
再次,你可以看到为什么只有三次迭代。
你应该学习这个&#34;手工调试&#34;技术。确切了解程序中发生的情况非常有用。一旦你有了更多的经验,你就可以使用调试器,但这样做是个好主意。