C语言关于格式说明里包含回车
来源:互联网 发布:张丕林 知乎 编辑:程序博客网 时间:2024/06/07 11:56
#include<stdio.h>void main(){int index;scanf("%d\n",&index);printf("%d\n",index);}
这是一个简单的程序,细心的你一眼看到这段程序会发现scanf()函数的格式说明里面的有个回车'\n',这段程序本意是从从标准输入流stdio中获取一个int数然后输出到屏幕上,但是当你执行(这里使用VC++6.0或者GCC)时,你会发现当你输入一个int型字符并回车结束时窗口屏幕上并没有输出任何值,而是等待下一个数的输入如图所示(这里以vc++6.0为例):
或者此时你会继续敲入回车来执行程序输出(情况1),但结果并不如你所愿,但是如果程序开始执行时你输入一个数并回车后再输入一个数并回车时你会发现,屏幕上会输出你第一个输入的数,如图:
这是为什么呢?这里我们要了解scanf()的特点了:
用scanf()输入非字符型数据,遇到以下几种情况时程序将视作数据输入结束:
1、读取时遇到空格符、回车符、制表符(tab)
2、读取时达到指定长度,例如,scanf("%4d",&n);若你输入12345,则传送到n的只是1234
3、读取时遇到输入非数字字符(即不属于 0~9的字符)
scanf()函数中的格式说明字符串中若含有'\n'等等转义字符时,会导致数据输入不能按照正常方式中止。
主要问题是出在换行符‘\n’上,这告诉了scanf()函数中的格式说明字符串中说明函数需要去匹配一个换行符,然而scanf()本身又是过滤所有的空白字符(换行符与回车符、制表符都属于空白字符)所以当提取了第一个int型数据后,scanf()会继续查找下一个匹配的字符,但是它又本能的跳过了空白字符,所以一直匹配不上,如果你一直敲回车那是没用的,道理如上,直到你输入了其他的字符,但是那已经是失配了。例如:
输入a与b是敲入4和5,但是敲入时4与5之间多输入了数个空格符,但是并不影响scanf()读取数值,正是因为scanf()读完一个字符会继续查找下一个匹配的字符,但是它又本能的跳过了空白字符。所以情况1中所说问题是不管你输入一个数字后输入多少个回车scanf()都会把这些回车当成一个空白字符来匹配格式说明字符串里的回车,所以当scanf()匹配完回车后遇到一个非空白字符就停止读取,这个非空白字符匹配失败,当再次遇到回车时便执行下一个语句。
- C语言关于格式说明里包含回车
- c语言"格式说明"
- C语言printf格式说明
- jaxb string里包含的回车换行(CRLF)将会替换成whitespace, 导致格式信息丢失
- C语言里回车和换行的区别
- C语言中关于文本文件的【回车】【换行】总结
- 关于C语言里格式化小数输出
- 关于C语言的一点说明
- 关于C语言中输出格式
- C语言中回车符
- c语言中关于头文件重复包含
- 关于C语言中头文件重复包含问题
- 关于C语言头文件包含的常用函数介绍
- c语言中关于头文件重复包含
- 【C语言】C\C++ 关于FILE结构定义说明
- C语言里printf函数格式控制符的完整格式
- <C语言>结构体里包含共用体实例--输入输出数据
- C语言 - 关于分支语句switch里default语句问题
- iOS 推送消息的原理
- iOS-遇见的面试题总结与分析
- 常量、变量、格式化控制符和转义字符的使用规范及注意事项
- 七牛---上传crc32校检说明与用法
- 46. PHP 数据库
- C语言关于格式说明里包含回车
- mysql表类型(引擎)介绍
- C#接口的显示与隐式
- 改变webView中请求的JS数据
- Linux命令备忘实例(15)——awk(1/2)
- Android学习基本索引(三)——记录,没事自己看
- 线段树+离散化问题
- MapReduce
- jQuery中的on方法