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

C语言自定义lower函数无法转换小写字母?新手求助

问题分析与解决建议

嘿,作为从Java转C的开发者,这种小细节确实容易踩坑!我一眼就看到问题所在啦——你调用了lower(c)但没有接收它的返回值,所以后续的putchar(c)输出的还是原来的输入字符,根本没用到转换后的结果。

核心问题拆解

C语言里函数参数是值传递,你传给lower的是c的副本,函数内部的计算结果只会通过返回值返回,不会自动修改外部的c变量。这和Java里的基本类型传递逻辑类似,但因为你习惯了OOP里的方法调用可能直接修改对象(当然Java基本类型也不会,但转C时可能一时没反应过来),所以忽略了接收返回值这一步。

修正后的代码

你只需要把转换后的结果赋值回c,或者直接在putchar里调用lower函数就行:

#include <stdio.h>
int lower(int c){
    if (c >= 'A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}
int main(){
    int c;
    while ((c = getchar()) != EOF){
        // 方案1:把返回值赋值给c再输出
        c = lower(c);
        putchar(c);
        
        // 方案2:直接在putchar里调用,更简洁
        // putchar(lower(c));
    }
}

额外小提示

其实C标准库已经提供了现成的转小写函数tolower(),你只需要引入<ctype.h>头文件就能用。不过自己实现lower函数来理解原理,这个学习思路非常棒!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:57:28