九度做题的时候遇到好多循环输入,while(~scanf("%d",&n))简析
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { printf("%d\n",n); } return 0; }
EOF
while(~scanf("%d",&n))
<=> while(scanf("%d",&n)!=EOF)
1.正常输入的时候,scanf返回输入的数字如1,2,3等等,对这些数字取非,不会成为0,就会执行循环;
2.错误输入指的就是没有输入的时候,scanf返回的是EOF(End Of File),EOF=-1,对EOF取非,就是对-1取非
[~是位运算,它是将数据在内存中的每一位(当然是二进制)取反。-1在内存中所有位全部为1,~(-1)=0,即对-1取非就是0]
就会跳出循环。
原文地址:http://blog.csdn.net/wtyvhreal/article/details/42006055