为什么~scanf()表示没有正确输入呢?
发布网友
发布时间:2023-12-22 11:15
我来回答
共4个回答
热心网友
时间:2024-01-17 21:24
调用scanf这个函数的返回值是成功读取的数据个数。
在你这段程序里,如果正确输入了,也就是成功读取了一个数据,scanf的返回值为1;如果没有正确输入,那成功读取的数据个数就是0,也就是scanf的返回值为0.
~的意思是把数据的各个二进制位反转。在C语言里不等于0就表示真。如果scanf返回值为0,那~scanf(...)就是~0,是一个二进制位全部为1的数,在C里当然表示真;如果scanf返回值为1,那~scanf(...)就是~1,是一个只有最后一个二进制位为0其余二进制位全部为1的数,在C里同样表示真。不论输入正确与否都为真,循环都会继续,因此~scanf(...)不能用于表示没有正确输入。
只有在遇到文件结束或者输入(Ctrl+D或者Ctrl+Z)时,scanf返回EOF,是个所有二进制位都为1的数,这时~scanf(...)就是~EOF,是一个所有二进制位都为0的数,也就是0,表示假,这时候循环才会结束。
所以,~scanf(...)是表示没有遇到文件结束或者输入(Ctrl+D或者Ctrl+Z),当然这时候自然也不会有正确输入。
热心网友
时间:2024-01-17 21:25
上面回答问题的人连代码都么读懂么,就敢给别人回答。
热心网友
时间:2024-01-17 21:25
~ 是取反码 !是 逻辑取反
热心网友
时间:2024-01-17 21:26
while(~scanf("%d",&a)),
汗~~。
估计你是想取反是吧?取反是用!,不是~。
!是逻辑取反
~是二进制求反。追问;这个语句有什么作用?
追答scanf("%d",&a)是读入整数
如果你输入的是非数字,那么结果返回0,~取反结果是-1;
如果你输入的是数字,返回结果1,~取反结果是-2.
所以while循环里结果要嘛是-1,要嘛是-2。那么while里面的条件就是永真。(0才表示假)
所以这个代码逻辑判断没有任何意义。
!取逻辑反才是正确的。