int i;
main()
{
int t;
for ( t=4;scanf("%d",&i)-t;printf("%d\n",i))
printf("%d--",t--);
}
如果输入为 0、1、2、3,则输出为:
4--0
3--1
2--2
请解释一下程序的输出。我无法弄清楚为什么输出是这样的。这个程序中的循环是如何工作的?为什么for循环中的printf不先打印?
最佳答案
将 for
循环转换为等效的 while
循环。表单的 for
循环
for (initialize; condition; increment)
{
body;
}
可以等效地写为:
initialize;
while (condition)
{
body;
increment;
}
请注意 increment
语句如何在循环底部结束。它在循环体之后、在开始循环的下一次迭代之前执行。
所以你的循环变成这样:
int i;
main()
{
int t;
t = 4;
while (scanf("%d",&i) - t)
{
printf("%d--", t--);
printf("%d\n", i));
}
}
这有帮助吗?
最棘手的部分是循环条件。当条件变为 0 时,循环将退出。 scanf
返回读入的项目数,这里每次读入的 %d
为 1。如果 scanf
每次都返回 1,则当 t
达到 1 时循环退出。
关于包含 scanf 和 printf 的声明的复合体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013557/