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

C++中islower()函数失效该如何解决?

问题分析与解决

你的问题出在对C标准库字符判断函数的返回值理解错误上:

  • islower()、isupper()这类<cctype>中的字符判断函数,返回值不是bool类型。当条件成立时,它们返回一个非零的整数(具体值由实现定义,不一定是1);条件不成立时返回0。
  • 你用islower(c) == true做判断,相当于和整数1比较。如果islower('c')返回的非零值不是1(比如常见的返回2),那这个比较结果就是false,导致代码进入else分支输出Upper。
  • 你测试isupper()时看似正常,只是巧合——刚好你的环境中isupper('C')返回了1,和true相等,但这不是正确的用法,换个环境或字符可能就会出错。

修正后的代码

针对islower()的测试代码,改成直接判断返回值是否非零即可:

#include <iostream>
#include <cctype> // 必须包含这个头文件,否则islower/isupper可能行为异常
using namespace std;
int main()
{
    char c;
    cin >> c;
    if (islower(c)) // 直接判断非零,无需和true比较
        cout << "Lower";
    else
        cout << "Upper";
    return 0;
}

同样,isupper()的测试代码也应该改成相同的写法:

#include <iostream>
#include <cctype>
using namespace std;
int main()
{
    char c;
    cin >> c;
    if (isupper(c))
        cout << "Upper";
    else
        cout << "Lower";
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:10:07