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
望远
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 即为真
- 5 回答
- 0 关注
- 4947 浏览
添加回答
举报
0/150
提交
取消