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

时间:2013-04-25 11:49:33

标签: c file scanf

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

这种方法如何运作?

'〜'运算符表示什么?

while(~scanf("%d",&n)) { 
  /* Your solution */
}

3 个答案:

答案 0 :(得分:9)

这是检查值是否与-1不同的可怕方法。 ~x返回x的按位否定。因此,请记住用于负数的补充代码(在大多数编译器上,因此这种方法甚至不是非常便携)-1由1-s序列表示,因此{{1将产生零。

请不要使用这种方法。简单地写~(-1)方式更容易理解。

答案 1 :(得分:2)

~是按位NOT运算符。因此,这是一种稍微模糊的循环方式,直到scanf返回-1以外的其他内容。换句话说,

while(~scanf("%d",&n))

相当于

while(scanf("%d",&n) != -1)

答案 2 :(得分:0)

在C~中是一个执行逐位移位操作的运算符,它创建原始数字的补码。 在C中,没有布尔类型,0是假,其他一切都是真的,在你的例子中:

while(~scanf("%d",&n)) { 
  /* Your solution */
}
如果没有更多要读取的字符,

scanf()返回EOF,等于-1(不是在所有平台中!)所以-1表示为(32位架构中的111 ... 32倍)~EOF = 0因此存在代码不适用于所有平台的风险。