为何外层while循环在内层循环终止后无法继续执行?
问题分析与修复方案
你的代码只输出00 99后就停止,核心问题是y的初始化位置错误:
你把y = x + 1写在了外层循环外面,第一次内层循环跑完后,y的值会递增到100。之后外层循环的x虽然会自增,但y始终保持100,内层循环的条件y <= 99永远不成立,所以不会再执行任何输出。
另外原代码还有一个小问题:所有组合后面都输出, ,最后会多一个多余的逗号,不符合预期格式。
修复后的完整代码
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_comb2(void) { int x; int y; x = 0; // 把y的初始化移到外层循环内部,每次x更新后重置y的起始值 while(x <= 98) { y = x + 1; while(y <= 99) { // 输出x的两位数字 ft_putchar((x / 10) + '0'); ft_putchar((x % 10) + '0'); write(1, " ", 1); // 输出y的两位数字 ft_putchar((y / 10) + '0'); ft_putchar((y % 10) + '0'); // 只有不是最后一组时,才输出逗号和空格 if (!(x == 98 && y == 99)) { write(1, ", ", 2); } y++; } x++; } } int main() { ft_print_comb2(); return (0); }
关键修改点说明
- 调整y的初始化位置:将
y = x + 1移到外层循环内部,确保每次x自增后,y都从x+1开始重新遍历,这样外层循环的每一个x都能对应正确的y范围。 - 移除多余的结尾逗号:通过判断
x == 98 && y == 99(最后一组组合),跳过输出逗号,保证格式符合预期。
内容的提问来源于stack exchange,提问作者user13350466
相关产品推荐
相关产品推荐

