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; }
代码说明:
- 使用
strcmp对比字符串:strcmp(a, b)返回0表示两个字符串内容完全相同,此时把对应的索引i赋值给result,就是我们要的整数。 - 标准
main函数:遵循C语言标准,正常退出返回0,输入无效时返回1。 - 增加交互提示:给用户输入指引,同时在输入无效时给出明确反馈。
- 优化效率:找到匹配项后直接退出程序,避免不必要的循环。
如果你需要处理多个英文数字组成的字符串(比如"one two three"),可以进一步用strtok分割输入字符串后逐个转换,不过当前版本已经能解决你提到的单个数字转换需求啦。
内容的提问来源于stack exchange,提问作者Mrunal Deole
相关产品推荐
相关产品推荐

