求解,关于#c语言#的问题:这是原代码#include <stdio.h>

这是原代码

#include<stdio.h
int main ()
{
    char b;
    while(~scanf("%c\n",&b))
    {
        if(b>='A'&&b<='Z')
            printf("%c\n",b+32);
        else if(b>='a'&&b<='z')
            printf("%c\n",b-32);
    }
    return 0;
}

我对这个while(~scanf("%c\n",&b))的意思不明白

scanf函数的原型是:
int scanf(const char *format, ...)
返回值是读取成功,则返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
在这里是读取1个字符,正常应该返回1.
取反,也就是1,它的结果是-2。EOF的定义值是-1,~EOF则为0,不为0则是true
因此这个循环会一直执行,直到遇到EOF。

他的意思应该就是把这个scanf("%c\n",&b)的输入结果的返回值作为while的判断条件,scanf("%c\n",&b)成功输入的返回值为1;

不过“~”是二进制的按位取反,就是0变成1,1变成0;这里我估计应该是不用这个符号的