为什么if内运行第二种结果出来是乱码的情况

为什么 可以这样

#include <stdio.h> 
int main()
{
    char x;
    scanf_s("%c", &x,1);
    while (x != '#')
    {
        if (x >=65 && x <=90)
        {
            x += 32;
        }
        else if (x >=97&& x <=122)
        {
            x -= 32;
        }
        printf("%c", x);
        scanf_s("%c", &x,1);
    }
    return 0;
}

而不能是这样


#include <stdio.h> 
int main()
{
    char x;
    scanf_s("%c", &x,1);
    while (x != '#')
    {
        if (x >='a' && x <= 'z')
        {
            x += 32;
        }
        else if (x >='A' && x <= 'Z')
        {
            x -= 32;
        }
        printf("%c", x);
        scanf_s("%c", &x,1);
    }
    return 0;
}

因为A的ASCII是65,a的ascii是97
所以第二个程序你写反了。

搞错了
第一个if语句内应该是 x-=32
else if 内应该是x+=32

【以下回答由 GPT 生成】

问题的原因是在第一个代码示例中,使用了 scanf_s 函数来读取字符,但没有正确处理输入缓冲区的问题,导致乱码的情况发生。解决这个问题的方法是在 scanf_s 函数之前加上一个空格来清空输入缓冲区。

下面给出修改后的代码示例:

#include <stdio.h>

int main()
{
    char x;
    scanf_s(" %c", &x, 1);  // 在 %c 前加上空格来清空输入缓冲区
    while (x != '#')
    {
        if (x >= 'A' && x <= 'Z')
        {
            x += 32;
        }
        else if (x >= 'a' && x <= 'z')
        {
            x -= 32;
        }
        printf("%c", x);
        scanf_s(" %c", &x, 1);  // 在 %c 前加上空格来清空输入缓冲区
    }
    return 0;
}

这样修改后,输入的字符就不会出现乱码的情况了。

第二个代码示例中使用的是 scanf_s 函数,但没有清空输入缓冲区,导致第二次输入的字符会受到上一次输入的影响,从而导致结果出现乱码。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^