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

while(scanf("%d",&n)!=EOF)与while(scanf("%d",&n))!

while(scanf("%d",&n)!=EOF)与while(scanf("%d",&n))!

C++
侃侃无极 2021-02-19 15:11:29
另外while(~scanf("%d",&n))与上面的两个有什么关系没有还有有些程序中会出现t>>=1这个中间的符号是什么意思啊,忘大神指教!!!在线等哦
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

如:
  scanf("%d,%d", &a, &b);
  如果a和b都被成功读入,那么scanf的返回值就是2
  如果只有a被成功读入,返回值为1
  如果a和b都未被成功读入,返回值为0
  如果遇到错误或遇到end of file,返回值为EOF。
你上边的两个都是看返回值来判断的 至于while(~scanf("%d",&n)) 没用过
t>>=1 即t = t >> 1 右移一位 再赋值 

查看完整回答
反对 回复 2021-03-16
?
森栏

TA贡献1810条经验 获得超5个赞

知识1:只有-1取反(~-1)是0
知识2:scanf读入到EOF时返回-1
所以,while(~scanf)就是不断读取执行循环,直到eof(
和while(scanf("%d",&n)!=EOF)一个意思
)。一般这种用法在oj(确保数据正确)上使用,平常真的用不到

查看完整回答
反对 回复 2021-03-16
?
墨色风雨

TA贡献1853条经验 获得超6个赞

最后一个简单
就是t = t>>1;右移一位操作.相当于除以2.
scanf的返回值是正确读入的元素个数,后面那个while(~...)没见过,但是意义很明显,正常情况是返回1,~表示按位取反,对1取反,这样其实没有多少实际意义.
scanf!=EOF常常用于判断是否结束输入( ctrl+Z(windows下)或者ctrl+D(unix下) )
while(scanf)即表示根据正确读入变量个数判断是否结束输入,这常常会出意想不到的出错.
简单实验一下应该可以得到较满意的答案.

查看完整回答
反对 回复 2021-03-16
  • 3 回答
  • 0 关注
  • 514 浏览

添加回答

举报

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