今天友人和我讨论了一段代码,是HDU的OJ上一道题目的解,代码如下

#include

{

int a,b;

while(~scanf("%d%d",&a,&b))

{

printf("%d\n",a+b);

}

return 0;

}

起初,我以为代码中while语句里的按位取反运算符写错了,应该是逻辑非运算符。

这时我在Quora上找到了类似的问题,我对其中一篇答案做了修改和翻译:

查阅scanf函数的man手册,关于返回值的说明如下

函数返回按照格式成功匹配并读入的输入项数量,并且可能会返回一个小于输入项总数的数字,而在匹配失败的情况下,甚至可能返回0。

如果在第一次成功读入或者发生匹配错误之前收到输入结束信号,将会返回EOF。在遇到读入错误的时候,也会返回EOF。

在上面的代码里,scanf的返回值可能是0,1,2或者EOF。

对0,1,2进行按位取反得到的都是非零值,此时while循环会继续执行。

在大多数环境里,EOF被定义为值为-1的常量,进行按位取反后得到的值为0.此时while循环将会结束。

综上所述,这个while语句可以不断从输入流读入数据,直到输入流结束,循环也就结束。

值得一提的是,这种用法仅仅在EOF被定义为-1的环境下有效,而且可读性很差。所以应该尽量避免使用它。

在Linux和OS X里,你可以通过Ctrl+D来发送一个输入结束信号,在Windows里你需要使用Ctrl+Z。

参考资料:

c语言while里有scanf,C语言中while语句里使用scanf的技巧相关推荐

  1. c语言if语句知识点总结,c语言中if语句知识点总结.docx

    c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  2. c语言switch语句支持的字符有哪些,C语言中switch()语句的括号内可以是什么型别的呢?...

    C语言中switch()语句的括号内可以是什么型别的呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言中swit ...

  3. c语言switch语句最大嵌套数,浅谈C语言中switch 语句的嵌套使用

    浅谈C语言中switch 语句的嵌套使用 作者:未知 [摘要]switch语句是一种分支控制语句,它的应用在程序设计中起至了很重要的作用.由于其格式复杂,对于初学者来说很难掌握,switch语句的嵌套 ...

  4. 素数在c语言表达能力,巧用C语言中的Continue语句解决数论中的问题

    .#0 福建电脑!""#年第$%期 巧用!语言中的!"#$%&'(语句解决数论中的问题 杨爱梅 !河南工业大学河南郑州"#$$#%& !摘要!运 ...

  5. C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?

    C语言中for语句的执行过程是:1.会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 :2.在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续 ...

  6. 在c语言中for的作用,c语言中for语句的用法

    C语言语言中FOR的用法 for 是一个循环语句,和while是类似的,for一般的用法有: for(i=0;i<10;i++) { printf("hello world" ...

  7. C语言中for语句的执行过程是什么?

    C语言中for语句的执行过程是: for语句的一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体:}. for循环执行时,会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执 ...

  8. C语言中for语句的执行步骤是什么,C语言中for语句的执行过程是怎样的

    C语言中for语句的执行过程是怎样的 发布时间:2020-07-27 13:48:19 来源:亿速云 阅读:122 作者:Leah 这期内容当中小编将会给大家带来有关C语言中for语句的执行过程是怎样 ...

  9. c语言中for循环体省略大括号,C语言中for语句的执行过程是什么?

    C语言中for语句的执行过程是:1.会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 :2.在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续 ...

最新文章

  1. 【滴滴专场】深度学习模型优化技术揭秘
  2. 送外卖最强的男人!!
  3. 怎样查看端口占用情况
  4. AI入门:不用任何公式把Embedding讲清楚
  5. 16位汇编 在代码段中使用栈
  6. 【mongoDB】 备份
  7. Oracle 数据库字典 sys.obj$ 表中关于type#的解释
  8. POE供电交换机应用方案及功能特性介绍
  9. [调试]Asp.Net常见问题
  10. Telerik for AJAX RadGrid控件
  11. python 日志收集系统
  12. python flask web_Python Web开发之Flask
  13. mac系统如何显示和隐藏文件
  14. itunes显示无法更新服务器失败怎么办啊,更新iTunes出现错误 iTunes更新失败解决方案...
  15. Sketch快捷键大全 Sketch如何自定义快捷键?
  16. js:webpack插件BannerPlugin添加版权信息
  17. linux防火墙设置命令,linux防火墙设置命令是什么
  18. 调频 调幅 与 通信
  19. 亚马逊POA计划怎么写
  20. 计算机操作系统汤晓丹版的实验A.7源代码

热门文章

  1. 在微信小程序中image标签src后面使用三元运算符
  2. python 网络_科学网-python 社会网络分析工具之networkx-郗强的博文
  3. 大厂资历程序员求职以为很容易,没想到栽在这里…
  4. 三国志战略版:Daniel_无当飞军与白马义从之对比分析
  5. TOML简介及NSQD对TOML的使用
  6. uevent 驱动_uevent机制
  7. 第九章 函数依赖学习记录
  8. 视频安全之视频播放密码功能(设置观看密码功能教程)
  9. pbootcms自动配图出图插件
  10. Cookie实现记住密码及自动登录