一.输出缓冲区

输出缓冲区是我们在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回车的问题相关推荐

  1. 8.linux 重定向详解,标准输入输出,输入重定向,输出重定向

    文章目录 一.初识 1.标准输入输出设备 2. 文件描述符 3. 重定向 3. &(重点) 二.输入重定向 三.输出重定向 1. 描述符 2. 输出重定向的符号及作用 总结 友情链接 一.初识 ...

  2. 详解getchar()函数与缓冲区

    1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...

  3. java 字符串缓冲区_详解Java中字符串缓冲区StringBuffer类的使用

    StringBuffer 是一个线程安全的可变的字符序列.它继承于AbstractStringBuilder,实现了CharSequence接口. StringBuilder 也是继承于Abstrac ...

  4. python seek tell_Python指针seektell详解

    课程多面升级为Python3.7版本 本课程持续更新中习惯的同学们可以关注一下. 课程提供详细的课堂笔记,让你体验保姆式学习体验,并安排讲师做24小时内答疑,如果遇到问题请第一时间留言,我们会及时安排 ...

  5. scanf函数详解与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

  6. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

  7. Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

    一.gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串. 调用格式为: gets(str); 其中str为字符串变量(字 ...

  8. 【C】C语言格式输入函数scanf()详解

    参考了:C语言格式输入函数scanf()详解 总述 scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. scanf函数的一般形式 scanf函数是一个标准库函数,它 ...

  9. scanf函数使用方法详解

    scanf函数使用方法详解 一.scanf函数是什么? 二.scanf函数的作用 三.注意事项 1.输入数据 2.%c 四.字段宽度 五.scanf函数的返回值 一.scanf函数是什么? 1.首先我 ...

  10. c语言输入循环语句,C语言中输入输出和循环语句详解.ppt

    C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...

最新文章

  1. java accept encoding_Accept-Encoding gzip 乱码 和Okhttp的解决方法
  2. Python基础-面向对象编程
  3. java比python难_python java JAVA比python难多少?
  4. 字节码分析finally块对return返回值的影响
  5. Ubuntu基本命令
  6. Dubbo爆出严重漏洞!可导致网站被控制、数据泄露!附解决方案
  7. 没有到主机的路由_网络基础知识:TCP协议之跟踪路由
  8. 63. Event button 事件属性
  9. 面向过程编程和面向对象编程的区别
  10. 网络安全Bypass网卡详细讲解
  11. 全国乡镇边界及名称的下载与格式转换方法(水经注万能地图X3.1+CASS10.1.5组合拳)
  12. php各版本共存方法,PHP多版本共存解决方案图解
  13. 穷人的语义处理工具箱之二:语义编辑距离
  14. Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包
  15. windows10蓝牙开关突然不见了,设备管理器中也没有蓝牙标志,也没有感叹号的硬件
  16. 卡罗拉更换变速油教程
  17. 计算机在小学教育教学中的优劣,计算机在小学教学中的应用探析
  18. caffe中的layer
  19. 用python实现随机选人、选取活动或节目小程序
  20. 量化、交易、策略、算法精选论文汇总,建议收藏

热门文章

  1. python灰度处理_python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算...
  2. thinkphp5学习笔记
  3. 沙洋有几个微服务群_QQ群控系统强力黑科技,助力你实现自动化获客
  4. linux改变磁盘顺序,Linux上磁盘顺序混乱的情况
  5. centos安装python环境_Centos7 安装python3 环境 并使用pip安装docker-compose
  6. radiogroup只走一次监听事件_如果一生只去一次内蒙,那走这条路线就够了!
  7. html中transition默认,CSS3中的Transition详解
  8. 清除tomcat缓存
  9. 北大生物信息学学习(2) 生物学及生物学信息学的发展
  10. 生新技能树单细胞GBM数据分析(SignleR以及Seurat 联合分析及细胞簇注释