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

C语言编写单数名词转复数函数输入diary无效果问题求助

问题原因
  • 直接触发bug的核心原因:fgets读取输入时会将你按下的换行符\n一并存入数组,你输入diary后,noun数组实际存储的内容是d i a r y \n \0,调用strlen(noun)得到的长度是6,noun[length-1]取到的是换行符\n,根本不等于'y',所以if分支完全没有执行,输出自然和原输入一致。
  • 潜在逻辑错误:就算解决了换行符的问题,你在修改字符时反复调用strlen(noun)是错误的,修改数组内容会改变strlen的返回值,后续的索引计算会完全错位,还会带来数组越界风险。你已经提前计算过length变量,直接用这个固定值做索引即可。
  • 注意点:替换y为ies时,要确保你的SIZE宏定义足够大,至少比输入的单词长度多3,否则会出现缓冲区溢出。
修复后代码
void pluralize()
{
    char noun[SIZE];

    printf("Please input a noun: ");
    fgets(noun, SIZE, stdin);

    int length = strlen(noun);
    // 移除fgets读取到的末尾换行符
    if (length > 0 && noun[length-1] == '\n') {
        noun[--length] = '\0';
    }

    if (length >= 1 && noun[length-1] == 'y')
    {
        // 直接用提前计算好的固定长度做索引
        noun[length-1] = 'i';
        noun[length] = 'e';
        noun[length+1] = 's';
        noun[length+2] = '\0';
    }

    printf("The plural of your word is: %s", noun);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:03