C语言嵌套while循环实现乘法表:代码异常原因及差异分析
两层while循环实现乘法表的问题分析
第一段代码的问题
#include <stdio.h> int main(void) { int i = 2, j = 1; while (i < 10) { while (j < 10) { printf("%d * %d = %d\n", i, j, i * j); j++; } i++; } return 0; }
这段代码仅输出2×1=2至2×9=18的结果,无法生成完整乘法表,问题出在变量j的生命周期:
j在程序开头仅初始化一次为1,第一次外层循环(i=2)执行时,内层循环会将j递增到10,此时内层循环的j < 10条件不成立,循环结束。- 后续外层循环迭代(i=3、4……9)时,
j的取值仍为10,内层循环的触发条件直接不满足,因此不会输出任何内容。
第二段代码的修正逻辑
#include <stdio.h> int main(void) { int i = 2, j = 0; while (i < 10) { j = 1; // *关键修正点* while (j < 10) { printf("%d * %d = %d\n", i, j, i * j); j++; } i++; } return 0; }
这段代码能正常生成完整乘法表,核心改动就是把j = 1的重置操作放到了外层循环内部:
- 每一次外层循环切换到新的乘数
i时,都会将j重新初始化为1,确保内层循环能从1开始遍历到9,输出当前i对应的所有乘法表达式。
核心差异
两段代码的本质区别仅在于变量j的重置时机:
- 第一段代码中
j仅在程序启动时初始化一次,后续没有重置,导致外层循环后续迭代时内层循环无法触发。 - 第二段代码在每次外层循环启动时重置
j为1,保证了每个i值都能对应完整的j遍历过程。
内容的提问来源于stack exchange,提问作者Jewoo Lee
相关产品推荐
相关产品推荐

