请问一下这个代码为什么只能小写变大写,大写不能自动变小写,检查了后没有发现错误唉(关键词-字符串)

请问一下这个代码为什么只能小写变大写,大写不能自动变小写,检查了后没有发现错误唉。求帮忙看下哪里有错,万分感谢!

img


代码如下(它的功能是:将字符串 tt 中的大写字母都改为对应的小写字母,
小写字母都改为对应的大写字母,其它字符不变。要求输入输出均在主函数中完成)

#include
#pragma warning(disable:4996)
/*10.编写函数void fun(char tt[]),它的功能是:将字符串 tt 中的大写字母都改为对应的小写字母,
小写字母都改为对应的大写字母,其它字符不变。要求输入输出均在主函数中完成。*/
int main()
{
    void fun(char tt[]);
    char str1[50];
    printf("请输入str1\n");
    gets(str1);
    fun(str1);
    printf("%s\n", str1);
    return 0;
}
void fun(char tt[])
{
    int i;
    for (i = 0; tt[i] != '\0'; i++)
    {
        if (tt[i] >= 'A' && tt[i] <= 'Z')
            tt[i] += 32;
        if (tt[i] >= 'a' && tt[i] <= 'z')
            tt[i] -= 32;
    }
}

22行改为else if
否则如果字符为大写,那么20行的if会将大写改为小写,而22行的if会再把这个小写改为大写的。两个if条件会都满足。

以下答案引用自GPT-3大模型,请合理使用:

的解释

这段代码的实现逻辑是,先从字符串的第一个字符开始,判断每一个字符是否在'a''z'之间,如果是就减去32,变成大写,如果是在'A''Z'之间,就加上32,变成小写,其它字符不变。但由于大小写字母都是ASCII码,只有32的差距,所以代码中无论是判断大写字母还是小写字母,都只针对一种。因此这段代码只能实现小写变大写,大写不能自动变小写。

如果要实现小写变大写,大写变小写,应该将代码修改如下:
int main()
{
    void fun(char tt[]);
    char str1[50];
    printf("请输入str1\n");
    gets(str1);
    fun(str1);
    printf("%s\n", str1);
    return 0;
}
void fun(char tt[])
{
    int i;
    for (i = 0; tt[i] != '\0'; i++)
    {
        if (tt[i] >= 'A' && tt[i] <= 'Z')
            tt[i] += 32;
        else if (tt[i] >= 'a' && tt[i] <= 'z')
            tt[i] -= 32;   //添加了else if表示只要满足上一条不满足,就会执行下一条
    }
}

如果我的回答解决了您的问题,请采纳我的回答