为何我的ft_print_comb函数没有任何输出?
问题分析与修正代码
你的代码存在几个关键逻辑错误,导致无输出或逻辑异常:
- 循环变量自增时机错误:进入循环体前就对
i、j、k执行自增,跳过了初始值的有效组合(比如i从'0'直接变成'1',丢失所有0开头的组合),同时导致循环条件判断失效。 - 边界输出处理缺失:所有组合后都输出逗号和空格,不符合格式要求(最后一个组合后不应有分隔符)。
以下是修正后的代码,严格遵循你的要求(仅用while循环、write输出):
#include <unistd.h> void ft_putchar(char x){ write(1, &x, 1); } void ft_print_comb() { char i, j, k; i = '0'; // 第一位数字范围0-7(需留两个更大的数字位置) while(i <= '7'){ j = i + 1; // 第二位数字范围i+1到8 while(j <= '8'){ k = j + 1; // 第三位数字范围j+1到9 while(k <= '9'){ ft_putchar(i); ft_putchar(j); ft_putchar(k); // 仅当不是最后一个组合(789)时,输出分隔符 if(!(i == '7' && j == '8' && k == '9')){ ft_putchar(','); ft_putchar(' '); } k++; } j++; } i++; } } int main(){ ft_print_comb(); return 0; }
修正说明
- 调整
i、j、k的自增位置,确保每个初始值都能进入循环处理,覆盖所有i<j<k的三位数字组合。 - 添加边界判断,最后一个组合
789输出后不再添加逗号和空格,符合格式要求。 - 所有组合按升序排列,完全满足需求。
内容的提问来源于stack exchange,提问作者user13350466
相关产品推荐
相关产品推荐

