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

如何修改C语言程序使其支持首字母大小写的数学函数名输入

C语言数学函数程序大小写兼容修复方案

问题根源

当前代码使用区分大小写的strcmp函数做字符串匹配,预设的函数名均为首字母大写格式,输入小写开头的函数名时无法匹配成功,因此会报错。

修复方法

方案1:使用大小写不敏感比较函数(最简修改)

你代码中已经添加了_CRT_SECURE_NO_WARNINGS宏,说明是Windows Visual Studio开发环境,直接将循环内的比较语句替换即可:
找到原代码中的判断逻辑:

if (strcmp(function[function_name], name) == 0)

替换为:

if (_stricmp(function[function_name], name) == 0)

_stricmp是VS提供的大小写不敏感字符串比较函数,替换后不管输入是sin、Sin还是SIN都可以正常匹配。
如果需要兼容Linux、Mac等POSIX系统,可以添加预处理适配:

// 在头文件引入区域添加适配逻辑
#ifdef _WIN32
#define STRICMP _stricmp
#else
#include <strings.h>
#define STRICMP strcasecmp
#endif

// 比较时使用适配后的宏即可
if (STRICMP(function[function_name], name) == 0)

方案2:统一字符串格式后比较(无平台依赖)

如果不想依赖平台专属接口,可以手动将输入的函数名转为和预设值一致的格式再比较:

  1. 首先引入字符处理头文件:
#include <ctype.h>
  1. 在读取用户输入的name之后,匹配循环之前添加转换逻辑:
if (strlen(name) > 0) {
    // 首字母转大写
    name[0] = toupper(name[0]);
    // 剩余字符转小写
    for (int i = 1; name[i] != '\0'; i++) {
        name[i] = tolower(name[i]);
    }
}

转换完成后,原有strcmp比较逻辑不需要修改即可兼容大小写输入。

额外优化建议

  • 你当前定义的输入缓冲区char name[6];长度为6,刚好容纳最长的函数名Log10(5个字符+1位结束符),如果后续新增更长的函数名需要同步调整缓冲区长度
  • 可以给scanf添加长度限制避免缓冲区溢出:scanf("%5s", name);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:08