我正在网上搜索如何使用scanf的返回值来检查文件的结尾! 我找到了以下代码。但是我很难理解?
这种方法如何运作?
'〜'运算符表示什么?
while(~scanf("%d",&n)) {
/* Your solution */
}
答案 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因此存在代码不适用于所有平台的风险。