C语言嵌套while循环输出异常 运行结果不符合预期
问题根因
你的代码有两个逻辑漏洞,导致输出不符合预期:
- 内层循环的计数变量
x没有在外层每轮循环开始时重置。第一次外层循环执行时,x从5一路递减到2才退出内层循环,后续两轮外层循环运行时,x的值一直是2,内层循环判断条件(x-1) > 1等价于1>1,永远不成立,自然不会再输出X,最终总共只会输出3个连在一起的X。 - 代码中没有输出换行符的逻辑。就算你修复了x重置的问题,所有输出的
X也会连在同一行,不会分成你预期的三行。
修复后可正常运行的代码
#include <unistd.h> void print(int x, int y) { while (y > 2) { // 用临时变量保存当前行的x初始值,避免修改原始参数影响后续循环 int cur_x = x; while ((cur_x - 1) > 1) { write(1, "X", 1); cur_x--; } // 每行X输出完成后写入换行符 write(1, "\n", 1); y--; } } int main(void) { print(5, 5); return (0); }
逻辑说明
- 外层循环的判断逻辑本身是正确的:传入y=5时,循环会在y=5、y=4、y=3三个状态下执行,刚好对应你需要的3行输出,y递减到2时自动终止循环。
- 用临时变量
cur_x承接每行的X计数后,每轮内层循环都会固定输出3个X,不会出现后续循环计数失效的问题。 - 新增的换行写入逻辑会在每一行X输出完成后换行,最终输出格式和你预期完全一致。
内容的提问来源于stack exchange,提问作者Avdic Elmin
相关产品推荐
相关产品推荐

