for循环调用函数后意外输出额外整数4的异常问题
循环结束后额外输出4的原因分析
你期望程序输出1、2、3后结束,但实际运行时多输出了一个4,问题出在这几个地方:
先看你的代码:
#include <stdio.h> int fun(int var); //int var = 345; int i = 0; int main(int argc, const char * argv[]) { //printf("%d\n", fun(156)); for(i = 0; i <= 3; i++){ fun(i); } printf("%d \n", i); return 0; } int fun(int var){ printf("%d\n", var); return 0; }
问题根源
for循环的执行流程是:初始化 → 条件判断 → 执行循环体 → 变量自增 → 再次条件判断……
- 当
i=3时,满足i<=3的条件,执行fun(3)输出3; - 之后执行
i++,i的值变成4; - 再次判断
i<=3,4不满足条件,循环结束; - 最后执行循环外的
printf("%d \n", i);,就输出了4。
你误以为循环在i=3时直接结束,但实际上循环体执行完后会先完成i的自增,再进行下一次条件判断,这时候i已经变成4了,而循环外的printf刚好输出了这个值。
解决办法
如果不想输出这个4,有两种简单方式:
- 直接删除循环结束后的
printf("%d \n", i);语句; - 修改循环条件为
i < 3,这样i到3时就不会进入循环,循环结束后i的值是3,即使保留printf也不会输出4。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

