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

C语言数字拼写转整数实现问题:编写的程序无法正常运行

修复你的英文数字转整数C程序

首先,咱们来看你代码里的几个关键问题,这些是导致程序无法正常运行的核心原因:

  • 未初始化的指针temp:你声明了char *temp;但没有给它分配内存空间,直接往temp[j]写数据会触发未定义行为,程序很可能崩溃或者输出错误结果。
  • 字符串比较方式错误:C语言里不能直接用==对比两个字符串的内容,这只会判断指针地址是否相同。必须用strcmp()函数来检查字符串内容是否一致。
  • main函数返回类型不标准:标准C规定main函数应该返回int类型,而非void。
  • 多余的字符串复制逻辑:你把input内容复制到temp的操作完全没必要,直接用input和num数组里的字符串对比就行。
  • 语法错误:代码里的break...是不完整的,应该写成break;。

下面是修正后的完整代码,能正确实现单个英文数字到整数的转换:

#include<stdio.h> 
#include<string.h> 

int main() { 
    int result = 0; 
    // 数字对应的英文拼写数组,索引直接对应数字值
    char *num[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
    char input[100]; 

    printf("请输入英文数字(如one):");
    scanf("%s", input); 

    // 遍历数组对比输入字符串
    for(int i = 0; i < 10; i++) { 
        if(strcmp(input, num[i]) == 0) { 
            result = i; 
            printf("转换后的整数是:%d\n", result);
            return 0; // 找到匹配项后直接退出程序,无需继续遍历
        } 
    } 

    // 若没有找到匹配的英文数字
    printf("输入的不是有效的英文数字!\n");
    return 1; 
}

代码说明:

  1. 使用strcmp对比字符串:strcmp(a, b)返回0表示两个字符串内容完全相同,此时把对应的索引i赋值给result,就是我们要的整数。
  2. 标准main函数:遵循C语言标准,正常退出返回0,输入无效时返回1。
  3. 增加交互提示:给用户输入指引,同时在输入无效时给出明确反馈。
  4. 优化效率:找到匹配项后直接退出程序,避免不必要的循环。

如果你需要处理多个英文数字组成的字符串(比如"one two three"),可以进一步用strtok分割输入字符串后逐个转换,不过当前版本已经能解决你提到的单个数字转换需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:46:33