使用"scanf()"的返回值来检查文件的结尾

poo*_*ank 4 c file scanf

我在网上搜索如何使用scanf的返回值来检查文件的结尾!我发现了以下代码.但是我很难理解?

这种方法有用吗?

'〜'运算符表示什么?

while(~scanf("%d",&n)) { 
  /* Your solution */
}
Run Code Online (Sandbox Code Playgroud)

izo*_*ica 9

这是检查值是否与-1不同的可怕方法.~x返回按位的否定x.因此,考虑到用于负数的互补代码(顺便说一下大多数编译器,因此这种方法甚至不是非常便携)-1由1-s序列表示,因此~(-1)将产生零.

请不要使用这种方法.简单地写scanf("%d", &n) != EOF方式更容易理解.

  • 是的,可移植的方式是`scanf("%d",&n)!= EOF`,[-1是大多数平台上的EOF值](http://www.cplusplus.com/reference/cstdio/EOF/) (2认同)