输入一个字符,判断它是否为大写字母,如果是,将它转换成小写字母,如果不是则不转换 可是输出始终是“?”(语言-c语言)

问题遇到的现象和发生背景

输入一个字符,判断它是否为大写字母,如果是,将它转换成小写字母,如果不是不转换
可是输出始终是“?”

问题相关代码,请勿粘贴截图
include<stdio.h>
int main()
{
    char ch;
    scanf_s("%c", &ch);
    if (ch >= 'A' && ch <= 'Z') {
        ch = ch + 32;
        printf("%d", ch);
    }
    else 
    { printf("%c\n", ch); }
    return 0;
}
运行结果及报错内容

img

img

我的解答思路和尝试过的方法

使用了新的算法,结果却相同

int main() {
    char ch, b;
    scanf_s("%c", &ch);
    b = (ch > 'A' && ch < 'Z') ? (ch + 32) : ch;//warning!!!!!//
    printf("%c", b);
    return 0;

我想要达到的结果

可以正常转换

    printf("%d", ch);

改成

    printf("%c", ch);

scanf_s函数字符变量后面要加字符长度1。scanf_s函数为了确保字符串安全,要求参数指定字符串的最大长度,避免溢出
scanf_s("%c", &ch);改成 scanf_s("%c", &ch, 1);
你题目的解答代码如下:

#include<stdio.h>
int main()
{
    char ch;
    scanf_s("%c", &ch, 1);
    if (ch >= 'A' && ch <= 'Z') {
        ch = ch + 32;
        printf("%c", ch);
    }
    else
    { printf("%c\n", ch); }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

scanf_s少了一个参数

scanf_s("%c", &ch, 1);
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632