if else语句问题

以下代码运行后出现乱码,if语句中的条件表达式和if执行语句中的逻辑表达式一定要同类型吗?求指导

#include <stdio.h>

int main()
{
        int ch;
        printf("请输入一行英文句子:");
        while ((ch = getchar()) != '\n')
        {
                if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch + 32;
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                        ch = ch - 32;
                }

                putchar(ch);
        }
        return 0;
}

运行结果:

img


若改为以下代码

#include <stdio.h>

int main()
{
        int ch;

        printf("请输入一行英文句子:");

        while ((ch = getchar()) != '\n')
        {
                if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch - 'A' + 'a';
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                        ch = ch - 'a' + 'A';
                }
                putchar(ch);
        }

        putchar('\n');
        return 0;
}

#include <stdio.h>

int main()
{
        int ch;

        printf("请输入一行英文句子:");

        while ((ch = getchar()) != '\n')
        {
                if (ch >= 97 && ch <= 122)
                {
                        ch = ch - 32;
                }
                else if (ch >= 65 && ch <= 90)
                {
                        ch = ch + 32;
                }

                putchar(ch);
        }
        return 0;
}

结果都如下:

img

第一个图的代码乱码的原因在哪里?最后的putchar('\n');代表什么

+32和-32写反了,'A' 的ASCII码值是65,'a' 的ASCII码值是97


#include <stdio.h>
 
int main()
{
        int ch;
        printf("请输入一行英文句子:");
        while ((ch = getchar()) != '\n')
        {
                if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch + 32;
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                        ch = ch - 32;
                }
 
                putchar(ch);
        }
        return 0;
}