可以经常在ACM代码中看到 while(~scanf("%d",&n)){ } 这样的代码,意思是在读到输入结尾时循环也结束。
~是按位取反
scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
while(~scanf("%d", &n))就是当没有输入的时候退出循环
一般在读到输入流结尾时,scanf返回的是EOF。
EOF是在头文件stdio.h中定义的常量,一般为-1。
~EOF则是对EOF进行按位取反操作,则为00000000。所以while条件不满足,循环结束。
EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
EOF 的值通常为 -1
EOF详细解释
转载链接为:EOF的意义及用法 - Tsingke - 博客园 (cnblogs.com)
在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。</