如何让程序跳过不必要的switch函数以避免前置零输出
解决前导零输出问题的思路和代码修改方案
嘿,我完全懂你的困扰——现在代码不管数位是不是前导零,都会一股脑输出对应的"zero ",导致输入123时多出开头的零,输入12时甚至有两个前导零对吧?核心问题就是没有区分前导零和中间/末尾的零,我们需要让程序跳过那些还没遇到有效数字前的零,一旦开始输出有效数字后,后面的零就正常保留。
核心思路
定义一个标记变量started,用来记录是否已经输出过第一个非零数字:
- 初始时
started = 0(还没开始输出有效数字) - 处理每个数位时:
- 如果当前数位不是0,或者已经开始输出有效数字(
started = 1),就执行输出 - 如果当前数位是非零数字,把
started设为1,后续的所有数位(包括零)都正常输出
- 如果当前数位不是0,或者已经开始输出有效数字(
修改后的代码示例
#include <stdio.h> // 抽离重复的数位输出逻辑,减少代码冗余 void print_digit(int digit, int is_last) { switch (digit) { case 0: is_last ? printf("zero") : printf("zero "); break; case 1: is_last ? printf("one") : printf("one "); break; case 2: is_last ? printf("two") : printf("two "); break; case 3: is_last ? printf("three") : printf("three "); break; case 4: is_last ? printf("four") : printf("four "); break; case 5: is_last ? printf("five") : printf("five "); break; case 6: is_last ? printf("six") : printf("six "); break; case 7: is_last ? printf("seven") : printf("seven "); break; case 8: is_last ? printf("eight") : printf("eight "); break; case 9: is_last ? printf("nine") : printf("nine "); break; } } int main() { int number = 123; // 示例输入,可替换为实际输入逻辑 int thou_place = number / 1000; int hun_place = (number / 100) % 10; int ten_place = (number / 10) % 10; int unit_place = number % 10; if (number > 0 && number < 10000) { int started = 0; // 标记是否已开始输出有效数位 // 处理千位 if (thou_place != 0 || started) { print_digit(thou_place, 0); if (thou_place != 0) started = 1; } // 处理百位 if (hun_place != 0 || started) { print_digit(hun_place, 0); if (hun_place != 0) started = 1; } // 处理十位 if (ten_place != 0 || started) { print_digit(ten_place, 0); if (ten_place != 0) started = 1; } // 处理个位(最后一个数位,避免末尾多余空格) if (unit_place != 0 || started) { print_digit(unit_place, 1); } printf("\n"); } return 0; }
代码说明
- 抽离重复逻辑:把每个数位的输出写成
print_digit函数,通过is_last参数处理末尾空格问题,避免结果最后多一个空格。 - 前导零判断:通过
started变量,只有遇到第一个非零数字后,才会输出后续的所有数位(包括零),完美解决前导零的问题。 - 边界处理:比如输入1023时,会输出"one zero two three",中间的零正常保留;输入12时,会输出"one two",前导的千位、百位零都被跳过。
这样修改后,就能完全符合你的期望输出啦!
内容的提问来源于stack exchange,提问作者user3773353
相关产品推荐
相关产品推荐

