C语言scanf函数以及缓存详解 |
您所在的位置:网站首页 › scanf字符输入的结束符是什么 › C语言scanf函数以及缓存详解 |
前言
以下代码都是在VC6.0环境下完成的;对于缓冲这个知识,我觉得还有一些疏漏或错误,但是我又没找到很详尽的资料,有知道的朋友欢迎留言讨论;
需要清楚的几个知识点(以笔记本电脑为例)
人们一个传统的思维就是,笔记本是一个整体,键盘,鼠标,硬盘,显示器,话筒,摄像头,喇叭等都是一个整体;这些组合起来确实是一个笔记本,但是对于CPU来说,这些设备都是外部输入输出设备(I/O),输出的是什么,输入的是什么?是数据;什么是输入设备,什么是输出设备? 输入设备:首先这是一个设备,设备的功能是用来输入信息;比如键盘,鼠标,咱们很容易理解键盘,当我在这儿敲打键盘写博客的时候,屏幕上会显示字,所以这是一个键盘向电脑输入信息的设备;这里注意:对于键盘来说,数据是在输入(到电脑),但对于CPU来说,数据是在读取 输出设备:同理就是用来输出信息的设备,比如你眼前的这个笔记本电脑屏幕;屏幕可以显示动画,文字,图片和视频;同理还有打印机,咱们经常打印一个word文件,很显然,CPU讲这个word输出到打印机;此时,对于打印机和屏幕来说,数据是在读取,对于CPU来说,数据是在写入(到输出设备)C语言中scanf()函数的分隔符:空格(space),回车(enter),指标符(table);
scanf() :标准输入函数
定义:scanf()函数在stdio.h头文件中可以找到声明;如下图; 处理机制 scanf()以删除的方式从缓冲区读取数据(输入设备的数据存储缓冲区,比如键盘);也就是说,scanf从缓冲区读入一个数据项,该数据项在缓冲区中就被清除掉了。而如果scanf需要读取一个数据项,返现缓冲区当前是空的,那么程序就会在scanf代码处阻塞,等待用户输入,scanf函数接收到相应的数据项之后,在缓冲区中将这一数据项清除,scanf函数返回,程序继续执行。 我们以一个简单程序流程说明处理机制: 1.编写代码: #include void main() { int a; printf("请输入一个整数:"); scanf("%d",&a); printf("a=%d\n",a); }输出结果 处理机制 (这里只针对%d) scanf对不同类型输入的处理方式 4.1 整数%d 对于整型数据的输入,也就是说”%d”类型的输入,scanf默认的分割符是所有的空白字符(空格,回车和指标符都行)。也就是说如果一个scanf函数中出现scanf(“%d%d”,&a,&b),那么用任何一个空白字符来分隔两个整数a,b的值,变量a,b都可以接收到正确的输入。另外,要注意的是,scanf对于数字输入,会忽略输入数据项前面的空白字符。 下面举个例子: #include void main() { int a,b; printf("请输入a和b的值:"); scanf("%d%d",&a,&b); //分隔符用空格 printf("a=%d\nb=%d\n",a,b); printf("----------------\n"); int c,d; printf("请输入c和d的值:"); scanf("%d%d",&c,&d); //分隔符用Tab printf("c=%d\nd=%d\n",c,d); printf("----------------\n"); }运行: 4.2字符串%s scanf对于字符串输入的处理和对整数类似,会忽略前导的空白字符,而且默认的分隔符是所有的空白字符。但是,要注意的是,由于C语言中,没有string类型,都是用char型数组来表示。因此,scanf会为每一个输入的字符串最后加一个‘\0’ (NULL)。下面是一个例子,可以看出scanf这货的边界控制还是要 #include void main() { char a[5],b[5]; int i; printf("请输入a和b的值:"); scanf("%s%s",a,b); printf("a=%s,b=%s\n",a,b); for(i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |