c语言while里有scanf,C语言中while语句里使用scanf的技巧
今天友人和我讨论了一段代码,是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的技巧相关推荐
- c语言if语句知识点总结,c语言中if语句知识点总结.docx
c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...
- c语言switch语句支持的字符有哪些,C语言中switch()语句的括号内可以是什么型别的呢?...
C语言中switch()语句的括号内可以是什么型别的呢?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言中swit ...
- c语言switch语句最大嵌套数,浅谈C语言中switch 语句的嵌套使用
浅谈C语言中switch 语句的嵌套使用 作者:未知 [摘要]switch语句是一种分支控制语句,它的应用在程序设计中起至了很重要的作用.由于其格式复杂,对于初学者来说很难掌握,switch语句的嵌套 ...
- 素数在c语言表达能力,巧用C语言中的Continue语句解决数论中的问题
.#0 福建电脑!""#年第$%期 巧用!语言中的!"#$%&'(语句解决数论中的问题 杨爱梅 !河南工业大学河南郑州"#$$#%& !摘要!运 ...
- C语言条件循环语句执行步骤,C语言中for语句的执行过程是什么?
C语言中for语句的执行过程是:1.会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 :2.在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续 ...
- 在c语言中for的作用,c语言中for语句的用法
C语言语言中FOR的用法 for 是一个循环语句,和while是类似的,for一般的用法有: for(i=0;i<10;i++) { printf("hello world" ...
- C语言中for语句的执行过程是什么?
C语言中for语句的执行过程是: for语句的一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体:}. for循环执行时,会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执 ...
- C语言中for语句的执行步骤是什么,C语言中for语句的执行过程是怎样的
C语言中for语句的执行过程是怎样的 发布时间:2020-07-27 13:48:19 来源:亿速云 阅读:122 作者:Leah 这期内容当中小编将会给大家带来有关C语言中for语句的执行过程是怎样 ...
- c语言中for循环体省略大括号,C语言中for语句的执行过程是什么?
C语言中for语句的执行过程是:1.会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 :2.在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续 ...
最新文章
- 【滴滴专场】深度学习模型优化技术揭秘
- 送外卖最强的男人!!
- 怎样查看端口占用情况
- AI入门:不用任何公式把Embedding讲清楚
- 16位汇编 在代码段中使用栈
- 【mongoDB】 备份
- Oracle 数据库字典 sys.obj$ 表中关于type#的解释
- POE供电交换机应用方案及功能特性介绍
- [调试]Asp.Net常见问题
- Telerik for AJAX RadGrid控件
- python 日志收集系统
- python flask web_Python Web开发之Flask
- mac系统如何显示和隐藏文件
- itunes显示无法更新服务器失败怎么办啊,更新iTunes出现错误 iTunes更新失败解决方案...
- Sketch快捷键大全 Sketch如何自定义快捷键?
- js:webpack插件BannerPlugin添加版权信息
- linux防火墙设置命令,linux防火墙设置命令是什么
- 调频 调幅 与 通信
- 亚马逊POA计划怎么写
- 计算机操作系统汤晓丹版的实验A.7源代码