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

C语言实现5位数字转单词及输入校验无限循环问题解决

问题1:无限循环的原因及修复
  • 核心原因1:仅在首次输入后计算了一次位数count,后续重新输入新的邮政编码后没有重新计算count值,导致count一直保留首次计算结果,永远无法满足退出循环的条件。
  • 核心原因2:计算位数时直接修改了原始输入的ac变量,就算后续输入合法,也丢失了原始输入值,无法进行后续转单词操作。
  • 额外可优化点:拼写错误intered应为entered,末尾的空while(count == 5)属于死循环,无实际作用可直接删除。
问题2:数字转英文单词的实现思路
  • 提前定义映射数组:用下标对应0-9的数字,数组值存储对应数字的英文单词,后续直接通过下标取值即可完成映射。
  • 逐位取数:对合法的5位数字,从最高位(万位)到最低位(个位)依次取出每一位的单独数值。
  • 按位输出:根据取出的数字下标从映射数组中取对应单词输出,单词间用空格分隔。
完整可运行代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    int ac, count;
    // 0-9对应英文单词的映射数组
    char *digit_words[] = {"zero", "one", "two", "three", "four", 
                           "five", "six", "seven", "eight", "nine"};

    // 输入校验循环
    while (1) {
        printf("Enter a 5 digit area code: ");
        scanf("%d", &ac);

        // 用临时变量计算位数,不修改原始ac的值
        count = 0;
        int temp = ac;
        // 兼容负数输入的情况
        if (temp < 0) temp = -temp;
        do {
            temp /= 10;
            count++;
        } while (temp != 0);

        if (count != 5) {
            printf("You entered %d digits.\n", count);
        } else {
            // 输入为合法5位数字,退出校验循环
            break;
        }
    }

    // 5位数字逐位转单词输出,从万位开始取数
    int divisor = 10000;
    for (int i = 0; i < 5; i++) {
        int current_digit = ac / divisor % 10;
        printf("%s ", digit_words[current_digit]);
        divisor /= 10;
    }
    printf("\n");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:21:01