C语言两位数英文拼写输出代码无结果问题排查(初学者)
C语言两位数英文拼写代码无输出问题排查
我正在完成一个C语言初学者练习:使用函数和分支语句输出两位数的英文拼写。但编写的代码运行后没有任何结果输出(我用switch语句实现分支逻辑),希望能帮忙排查错误。
原代码
#include <stdio.h> // 处理十位为1时的个位数字 void ten(char b) { switch (b) { case(0): printf("ten"); break; case(1): printf("eleven"); break; case(2): printf("twelve"); break; case(3): printf("thirteen"); break; case(4): printf("fourteen"); break; case(5): printf("fifthteen"); break; case(6): printf("sixteen"); break; case(7): printf("seventeen"); break; case(8): printf("eighteen"); break; case(9): printf("nineteen"); break; } } // 处理十位不为1时的个位数字 void morethanten(char b) { switch (b) { case(0): break; case(1): printf("one"); break; case(2): printf("two"); break; case(3): printf("three"); break; case(4): printf("four"); break; case(5): printf("five"); break; case(6): printf("six"); break; case(7): printf("seven"); break; case(8): printf("eight"); break; case(9): printf("nine"); break; } } int main() { char a, b; printf("Enter your 2-digit number: "); scanf("%c%c", &a, &b); // 处理十位数字 switch (a) { case(0): printf("That is not a 2-digit number"); break; case(1): ten(b); break; case(2): printf("Twenty"); morethanten(b); break; case(3): printf("Thirty"); morethanten(b); break; case(4): printf("Fourty"); morethanten(b); break; case(5): printf("Fifthty"); morethanten(b); break; case(6): printf("Sixty"); morethanten(b); break; case(7): printf("Seventy"); morethanten(b); break; case(8): printf("Eighty"); morethanten(b); break; case(9): printf("Ninety"); morethanten(b); break; } return 0; }
核心错误:字符与数值不匹配导致switch无分支执行
你用char类型存储输入的数字字符,但switch的case判断用的是整数数值(比如case(0)),而输入的字符'0'-'9'对应的ASCII码是48-57,和整数0-9完全不相等,所以所有case分支都不会被触发,自然没有任何输出。
修正方案:把所有case里的数值改成对应的字符形式,比如case '0'、case '1'等,包括ten和morethanten函数里的switch判断。
其他需修正的问题(不影响输出但影响结果正确性)
- 英文拼写错误:
fifthteen→fifteenFifthty→FiftyFourty→Forty
- 格式问题:输出类似21的数字时会显示
Twentyone,可以在输出十位后加空格,比如printf("Twenty "); - 输入鲁棒性:
scanf("%c%c")可能读取到换行符,导致后续输入异常,建议改为读取整数再拆分十位和个位:int num; scanf("%d", &num); char a = num / 10 + '0'; // 转成字符形式 char b = num % 10 + '0';
修正后的完整代码示例
#include <stdio.h> // 处理十位为1时的个位数字 void ten(char b) { switch (b) { case '0': printf("ten"); break; case '1': printf("eleven"); break; case '2': printf("twelve"); break; case '3': printf("thirteen"); break; case '4': printf("fourteen"); break; case '5': printf("fifteen"); break; case '6': printf("sixteen"); break; case '7': printf("seventeen"); break; case '8': printf("eighteen"); break; case '9': printf("nineteen"); break; } } // 处理十位不为1时的个位数字 void morethanten(char b) { switch (b) { case '0': break; case '1': printf(" one"); break; case '2': printf(" two"); break; case '3': printf(" three"); break; case '4': printf(" four"); break; case '5': printf(" five"); break; case '6': printf(" six"); break; case '7': printf(" seven"); break; case '8': printf(" eight"); break; case '9': printf(" nine"); break; } } int main() { int num; printf("Enter your 2-digit number: "); scanf("%d", &num); // 验证是否为两位数 if (num < 10 || num > 99) { printf("That is not a 2-digit number"); return 0; } char a = num / 10 + '0'; char b = num % 10 + '0'; // 处理十位数字 switch (a) { case '1': ten(b); break; case '2': printf("Twenty"); morethanten(b); break; case '3': printf("Thirty"); morethanten(b); break; case '4': printf("Forty"); morethanten(b); break; case '5': printf("Fifty"); morethanten(b); break; case '6': printf("Sixty"); morethanten(b); break; case '7': printf("Seventy"); morethanten(b); break; case '8': printf("Eighty"); morethanten(b); break; case '9': printf("Ninety"); morethanten(b); break; } return 0; }
内容的提问来源于stack exchange,提问作者NgoMinh
相关产品推荐
相关产品推荐

