C语言for循环为何仅输出最终结果而非逐次迭代内容?
问题原因:for循环末尾的多余分号导致逻辑偏离
你的代码里有个很容易犯的语法小错误——for (i = 1; i <= num; i++); 这一行末尾的分号。
在C语言里,分号代表一个空语句,也就是说这个for循环的循环体就是什么都不执行,只是单纯让变量i从1开始递增,直到i的值超过你输入的num(比如输入5时,i会一直加到6,此时i <= num不成立,循环终止)。
而你写的printf("%d", i);不在循环体内,是循环结束后才会执行的语句,自然只会输出一次循环结束后的i值,也就是num + 1,这就是为什么输入5会输出6。
要实现每次循环都输出i的需求,只需要去掉for循环末尾的分号,让printf成为循环体的一部分即可,规范起见也可以用大括号把循环体括起来:
修正后的代码示例:
#include <stdio.h> #include <stdlib.h> int main() { int num, i; printf("Enter a Number: "); scanf("%d", &num); // 去掉分号,用大括号包裹循环体(推荐写法,可读性更强) for (i = 1; i <= num; i++) { printf("%d ", i); // 加个空格让输出的数字更易区分 } return 0; }
这样输入5时,就会依次输出1 2 3 4 5了。
内容的提问来源于stack exchange,提问作者user17651225
相关产品推荐
相关产品推荐

