You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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判断。

其他需修正的问题(不影响输出但影响结果正确性)

  1. 英文拼写错误:
    • fifthteen → fifteen
    • Fifthty → Fifty
    • Fourty → Forty
  2. 格式问题:输出类似21的数字时会显示Twentyone,可以在输出十位后加空格,比如printf("Twenty ");
  3. 输入鲁棒性: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:43:27