如何去除C语言程序输出结果中的最后一个逗号?
解决ft_print_comb函数末尾多余逗号的问题
你的代码主要有两个问题导致末尾逗号无法去除:
- else分支没有用花括号包裹,导致
write(", ", 2);和k++;每次循环都会执行,哪怕是最后一个组合 - 硬编码判断
i=='7' && j=='8'的写法不仅死板,还存在write(1, '1 ', 1);的错误(第二个参数应该是字符串地址,不是字符字面量)
下面提供两种可行的修复方案:
方案1:修正原逻辑,判断当前是否为最后一个组合
调整判断条件,确保只有非最后一个组合才输出逗号,同时修复代码块的花括号问题:
#include<stdio.h> #include<unistd.h> void ft_putchar(char x, char y, char z){ write(1, &x, 1); write(1, &y, 1); write(1, &z, 1); } void ft_print_comb() { char i, j, k; i = '0'; while (i <= '7') { j = i + 1; while (j <= '8') { k = j + 1; while (k <= '9') { ft_putchar(i, j, k); // 判断是否是最后一个组合:789 if (!(i == '7' && j == '8' && k == '9')) { write(1, ", ", 2); } k++; } j++; } i++; } } int main(){ ft_print_comb(); return 0; }
方案2:更优雅的写法(避免末尾判断)
先打印第一个组合,之后的每个组合都先输出逗号再打印数字,从根源上避免末尾出现逗号:
#include<stdio.h> #include<unistd.h> void ft_putchar(char x, char y, char z){ write(1, &x, 1); write(1, &y, 1); write(1, &z, 1); } void ft_print_comb() { char i, j, k; // 先打印第一个组合012 ft_putchar('0', '1', '2'); i = '0'; while (i <= '7') { j = i + 1; while (j <= '8') { k = j + 1; // 跳过第一个组合的打印 if (i == '0' && j == '1' && k == '2') { k++; continue; } while (k <= '9') { // 先输出逗号,再打印组合 write(1, ", ", 2); ft_putchar(i, j, k); k++; } j++; } i++; } } int main(){ ft_print_comb(); return 0; }
这两种方案都能正确输出所有升序三位数字组合,且末尾不会有多余逗号。
内容的提问来源于stack exchange,提问作者user13350466
相关产品推荐
相关产品推荐

