这是原代码
#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;这里我估计应该是不用这个符号的