详解,c/c++输入输出缓冲区,以及scanf回车的问题
一.输出缓冲区
输出缓冲区是我们在dos窗口下,或终端下,linux/windows为我们分配的默认输出缓冲区大小,也就是窗口一次能容下多少字符!输出缓冲区大小是和图像一样的,用宽高来定义的,换句话说输出缓冲区就相当于一个小型屏幕,而屏幕的宽高由操作系统指定/用户,我们可以将我们程序运行时的一些数据输入到此缓冲区中,在屏幕中显示出来,列如(printf/cout)就是这样做的。
输出缓冲区是当我们运行一个以dos窗口为基础的c/c++程序时,操作系统会默认为我们调用一个dos窗口并将程序文件加载到dos系统中,由dos来运行!
输出缓冲区是默认的,但是我们可以手动来调节!
输出缓冲调节办法
将鼠标光标焦点挪移到dos窗口标题栏处,然后右键
选择属性
选择布局
在这里调节屏幕缓冲区大小即可
这里我的是80*300,也就代表我的屏幕缓冲区最大可以存放:24000个像素!
一旦超出该范围就会删除递增替换掉原来的缓冲区数据!
列如
1 1 1
2 2 2
3 3 3
此时缓冲区已经满了,再往里写数据的话就会替换掉第一行
2 2 2
3 3 3
4 4 4
二.输入缓冲区
是当你程序运行时用于保存暂时输入的数据的,就是平时我们在dos窗口上输入的数据,都会被放在输入缓冲区中,但是输入进去时也会显示在输出缓冲区上!
列如,你在dos窗口上正在输入数据,但是你的dos窗口输出缓冲区大小为5,那么当你输入超出5个像素时就会替换掉原先的输出缓冲区数据,但是不会替换掉输入缓冲区的数据!
相反,如果你输入缓冲区爆满的话也会被递增替换!
当你在一个只能存放5个像素的屏幕缓冲区中输入以下数据时
12345(此时是正常的)
当你输入第6个数据的时候就会递增替换
23456
三. scnaf回车的问题
不知道大家平时在编写c/c++程序时会有这样的问题
列如:
int a;scanf("%d%[\n]", &a);printf("%d", a);int b;scanf("%d%[\n]", &b);
在你使用scanf获取数据时当你输入完a变量的值时按下回车时,接收b的scanf直接跳过了!
这种问题的原因是因为,scanf不会去接收回车,而是以回车结束,当你在dos窗口上输入数据时都会被输入到输入缓冲区中,而scanf会冲输入缓冲区读取这些数据,scanf会以回车作为EOF(结束)标志,但它不会去读取回车!所以此时回车停留在输入缓冲区中,当我们执行下一次的scanf时就会被读取出来!而恰好scanf是以换行结尾的,所以才发生直接跳过的现象!
解决方法:
注意这种情况只有在输入字符时候才有效!
当你以%d或其他以整数为类型的格式占位符时不会出现这样的问题!
1.刷新输入缓冲区
fflush(stdin);
stdin:输入缓冲区,一般指键盘输入的数据,数据只有键盘才能输入,当然你也可以copy,不过那也是键盘打出来的数据!
2.使用getchar将缓冲区数据读取出来
getchar();
3.使用正则表达式
在scanf下面输入以下代码scanf会自动从stdin中读取一个空格
scanf("%[^ ]");不在以回车为结尾,以空格为结尾,仅在读取字符串情况下有效!
详解,c/c++输入输出缓冲区,以及scanf回车的问题相关推荐
- 8.linux 重定向详解,标准输入输出,输入重定向,输出重定向
文章目录 一.初识 1.标准输入输出设备 2. 文件描述符 3. 重定向 3. &(重点) 二.输入重定向 三.输出重定向 1. 描述符 2. 输出重定向的符号及作用 总结 友情链接 一.初识 ...
- 详解getchar()函数与缓冲区
1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...
- java 字符串缓冲区_详解Java中字符串缓冲区StringBuffer类的使用
StringBuffer 是一个线程安全的可变的字符序列.它继承于AbstractStringBuilder,实现了CharSequence接口. StringBuilder 也是继承于Abstrac ...
- python seek tell_Python指针seektell详解
课程多面升级为Python3.7版本 本课程持续更新中习惯的同学们可以关注一下. 课程提供详细的课堂笔记,让你体验保姆式学习体验,并安排讲师做24小时内答疑,如果遇到问题请第一时间留言,我们会及时安排 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】
故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...
- Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
一.gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串. 调用格式为: gets(str); 其中str为字符串变量(字 ...
- 【C】C语言格式输入函数scanf()详解
参考了:C语言格式输入函数scanf()详解 总述 scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. scanf函数的一般形式 scanf函数是一个标准库函数,它 ...
- scanf函数使用方法详解
scanf函数使用方法详解 一.scanf函数是什么? 二.scanf函数的作用 三.注意事项 1.输入数据 2.%c 四.字段宽度 五.scanf函数的返回值 一.scanf函数是什么? 1.首先我 ...
- c语言输入循环语句,C语言中输入输出和循环语句详解.ppt
C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...
最新文章
- java accept encoding_Accept-Encoding gzip 乱码 和Okhttp的解决方法
- Python基础-面向对象编程
- java比python难_python java JAVA比python难多少?
- 字节码分析finally块对return返回值的影响
- Ubuntu基本命令
- Dubbo爆出严重漏洞!可导致网站被控制、数据泄露!附解决方案
- 没有到主机的路由_网络基础知识:TCP协议之跟踪路由
- 63. Event button 事件属性
- 面向过程编程和面向对象编程的区别
- 网络安全Bypass网卡详细讲解
- 全国乡镇边界及名称的下载与格式转换方法(水经注万能地图X3.1+CASS10.1.5组合拳)
- php各版本共存方法,PHP多版本共存解决方案图解
- 穷人的语义处理工具箱之二:语义编辑距离
- Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包
- windows10蓝牙开关突然不见了,设备管理器中也没有蓝牙标志,也没有感叹号的硬件
- 卡罗拉更换变速油教程
- 计算机在小学教育教学中的优劣,计算机在小学教学中的应用探析
- caffe中的layer
- 用python实现随机选人、选取活动或节目小程序
- 量化、交易、策略、算法精选论文汇总,建议收藏
热门文章
- python灰度处理_python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算...
- thinkphp5学习笔记
- 沙洋有几个微服务群_QQ群控系统强力黑科技,助力你实现自动化获客
- linux改变磁盘顺序,Linux上磁盘顺序混乱的情况
- centos安装python环境_Centos7 安装python3 环境 并使用pip安装docker-compose
- radiogroup只走一次监听事件_如果一生只去一次内蒙,那走这条路线就够了!
- html中transition默认,CSS3中的Transition详解
- 清除tomcat缓存
- 北大生物信息学学习(2) 生物学及生物学信息学的发展
- 生新技能树单细胞GBM数据分析(SignleR以及Seurat 联合分析及细胞簇注释