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

如何用C语言实现数字逐位转英文拼写?现有代码死循环求修复

问题排查与修复

死循环根因

你写的第二个while(rev!=0)循环中,只提取了rev的个位数值处理,没有执行rev /= 10来移除已处理的个位,导致rev值永远不会变为0,循环无法终止。比如输入21时,反转后的rev值固定为12,每次循环都取个位2打印,自然会无限输出Two。

原代码其他缺陷

  • 数字反转逻辑会丢失原数字末尾的0:比如输入320,反转后的rev值为23,最终输出结果为Two Three,与预期的Three Two Zero不符
  • void main()不符合C语言标准规范,标准入口函数返回值应为int
  • 输出结果末尾会多余一个空格

修复方案

这里提供更稳妥的实现,直接将输入作为字符串遍历,无需处理数字反转和0丢失问题:

#include <stdio.h>
int main(){
    char num[32];
    printf("Enter any number to print in words: ");
    scanf("%s", num);
    for (int i = 0; num[i] != '\0'; i++) {
        switch(num[i] - '0') {
            case 0: printf("Zero"); 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;
        }
        if (num[i+1] != '\0') printf(" ");
    }
    return 0;
}

如果要保留原数字反转的思路,只需要补全rev移位逻辑,同时额外处理原数字末尾0的情况即可:

#include <stdio.h>
int main(){
    long int num, rev=0;
    int zero_count = 0;
    printf("Enter any number to print in words: ");
    scanf("%ld",&num);
    // 统计末尾0的数量,避免反转后丢失
    while(num != 0 && num%10 == 0) {
        zero_count++;
        num /= 10;
    }
    while(num != 0){
        rev = (rev*10) + (num%10);
        num /= 10;
    }
    while(rev != 0){
        long int x = rev%10;
        switch(x){
            case 0: printf("Zero"); 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;
        }
        printf(" ");
        // 移除已处理的个位,避免死循环
        rev /= 10;
    }
    // 补回之前丢失的末尾0
    for(int i=0; i<zero_count; i++) {
        printf("Zero");
        if(i != zero_count-1) printf(" ");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Parth Rajawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:15:00