C语言数字转英文程序输入大于9999时输出冗余内容如何修复
C语言数字转英文读法输入范围校验异常修复方案
问题原因
当前代码仅在输入超出范围时打印错误提示,未终止后续转换逻辑执行,因此非法输入仍会触发所有数字判断分支,输出多余内容。
修复方法
有两种成熟的修复方案可选:
- 方案1(改动最小):在错误提示代码块末尾添加
return 0;,直接结束程序运行,避免后续逻辑执行
if(num<0 || num>9999) { printf("entered number is not valid\n"); return 0; // 新增该行即可 }
- 方案2(逻辑分层更清晰):把所有数字转英文的代码全部包裹在输入合法的
else块中,只有输入符合0~9999范围才会执行转换
if(num<0 || num>9999) { printf("entered number is not valid\n"); } else { // 原有四位、三位、两位、一位数转换代码全部移入该块 }
额外优化点
现有代码存在两个可同步修复的小问题:
- 200对应的输出写为
twohundred,缺少空格,改为two hundred - 40对应的拼写
fourty错误,正确拼写为forty
完整修改后代码(采用方案1)
#include <stdio.h> int main() { int num; printf("Enter a number: "); scanf("%d", &num); if(num<0 || num>9999) { printf("entered number is not valid\n"); return 0; } //四位数千位处理 if (num >= 9000) { printf("nine thousand "); num -= 9000; } else if (num >= 8000) { printf("eight thousand "); num -= 8000; } else if (num >= 7000) { printf("seven thousand "); num -= 7000; } else if (num >= 6000) { printf("six thousand "); num -= 6000; } else if (num >= 5000) { printf("five thousand "); num -= 5000; } else if (num >= 4000) { printf("four thousand "); num -= 4000; } else if (num >= 3000) { printf("three thousand "); num -= 3000; } else if (num >= 2000) { printf("two thousand "); num -= 2000; } else if (num >= 1000) { printf("one thousand "); num -= 1000; } //三位数百位处理 if (num >= 900) { printf("nine hundred "); num -= 900; } if (num >= 800) { printf("eight hundred "); num -= 800; } if (num >= 700) { printf("seven hundred "); num -= 700; } if (num >= 600) { printf("six hundred "); num -= 600; } if (num >= 500) { printf("five hundred "); num -= 500; } if (num >= 400) { printf("four hundred "); num -= 400; } if (num >= 300) { printf("three hundred "); num -= 300; } if (num >= 200) { printf("two hundred "); num -= 200; } if (num >= 100) { printf("one hundred "); num -= 100; } //两位数十位处理 if (num >= 90) { printf("ninety "); num -= 90; } if (num >= 80) { printf("eighty "); num -= 80; } if (num >= 70) { printf("seventy "); num -= 70; } if (num >= 60) { printf("sixty "); num -= 60; } if (num >= 50) { printf("fifty "); num -= 50; } if (num >= 40) { printf("forty "); num -= 40; } if (num >= 30) { printf("thirty "); num -= 30; } if (num >= 20) { printf("twenty "); num -= 20; } //10-19特殊数字处理 if (num >= 19) { printf("nineteen "); num -= 19; } if (num >= 18) { printf("eighteen "); num -= 18; } if (num >= 17) { printf("seventeen "); num -= 17; } if (num >=16 ) { printf("sixteen "); num -= 16; } if (num >=15 ) { printf("fifteen "); num -= 15; } if (num >=14 ) { printf("fourteen "); num -= 14; } if (num >=13 ) { printf("thirteen "); num -= 13; } if (num >=12 ) { printf("twelve "); num -= 12; } if (num >=11 ) { printf("eleven "); num -= 11; } if (num >=10 ) { printf("ten "); num -= 10; } //个位数处理 if (num >=9 ) { printf("nine "); num -= 9 ; } if (num >= 8) { printf("eight "); num -= 8; } if (num >= 7) { printf("seven "); num -= 7; } if (num >=6 ) { printf("six "); num -= 6; } if (num >= 5) { printf("five "); num -= 5; } if (num >=4 ) { printf("four "); num -= 4; } if (num >= 3) { printf("three "); num -= 3; } if (num >=2 ) { printf("two "); num -= 2; } if (num >= 1) { printf("one "); num -=1 ; } printf("\n"); return 0; }
内容的提问来源于stack exchange,提问作者Shark tales
相关产品推荐
相关产品推荐

