为了账号安全,请及时绑定邮箱和手机立即绑定

~scanf是什么意思,为什么scanf前加~

~scanf是什么意思,为什么scanf前加~

C
为什么老是要证明我是我 2017-10-06 23:10:08
查看完整描述

5 回答

?
onemoo

TA贡献883条经验 获得超454个赞

前面 望远 的回答说明的是这个代码的意图。

我想提醒下:这样用取反 ~ 运算符来判断是否为 EOF 的方法是不合适的!

很多人认为 EOF 的值是 -1,在很多平台上这个值也确实是 -1。但是,C 标准实际上只是规定 EOF 值为负 int 值!并没有说它一定是 -1!!

所以,有可能在某些平台上 EOF 值并非 -1,这样这个方法就无法判断是否读取到 EOF 了。


C 标准定义了一个宏 EOF 来表示 End Of File。所以推荐且安全的做法是用 EOF 来作比较:

scanf("%d %d",&a,&b) == EOF


查看完整回答
1 反对 回复 2017-10-07
?
望远

TA贡献1017条经验 获得超1032个赞

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
scanf("%d %d",&a,&b);    
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。
其中EOF的值为-1
也就是说scanf返回值的取值范围是大于等于-1的整数只有返回值为EOF时 其取反的的值 即while循环的判断条件才为0 才能结束循环
(-1的补码表示全是1,按位取反后全是0,即为假)其它输入情况下(无论是否输入成功) while循环的判断条件为非0 即为真


查看完整回答
1 反对 回复 2017-10-07
?
Yellow2dong

TA贡献2条经验 获得超0个赞

贴代码

查看完整回答
反对 回复 2017-10-07
?
xungeer29

TA贡献46条经验 获得超20个赞

看看检测文件尾的内容EOF

查看完整回答
反对 回复 2017-10-07
?
闹闹的女朋友

TA贡献13条经验 获得超4个赞

不懂你的意思

查看完整回答
反对 回复 2017-10-07
  • 5 回答
  • 0 关注
  • 4947 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信