当前位置: 首页 > news >正文

初识c语言————缓冲区字符滞留

今天我们来讲c语言中的缓冲区字符滞留


目录:

一.缓冲区为什么会有字符滞留

二.什么时候需要清理缓冲区字符滞留

三.什么时候不需要清理缓冲区字符滞留


下面我们正式学习c语言中的缓冲区字符滞留

一.缓冲区为什么会有字符滞留

1.我们使用键盘输入数字实际上就是我们向缓冲区输入数字

2.当我们使用输入函数读取的时候只有当这些输入函数遇到\n或者缓冲区满的时候才会进行读取,但是这些输入函数并不会直接把所有缓冲区的元素拿走,而只是拿走\n之前的元素(scanf函数遇到空格会停止),从而导致了缓冲区有字符滞留(\n)

   例如:

当我们使用scanf函数时,我们用键盘输入hello,scanf函数不会读取;当我们用键盘输入hello+回车(\n),scanf函数会读取数字,但只会读取\n之前的数字

二.什么时候需要清理缓冲区字符滞留

当我们同时使用多个不同类型的输入函数的时候,我们需要在每个函数之间进行清理缓冲区字符[while(num1=(getchar())!='\n'&&num1!=EOF)]

   例如:

当我们使用scanf函数读取hello\n的时候,缓冲区回滞留\n,当我们再次使用getchar或者scanf("%c")的时候,这些函数会直接读取\n,并不会发挥原本函数的功能

   注意:

1.scanf("%s", str);  // 读取 "hello"(遇到空格/换行停止)
2.getchar();         // 读取的是残留的 '\n',而不是预期的下一个字符
3.scanf("%c", &ch);  // 同样会直接读取 '\n'

三.什么时候不需要清理缓冲区字符滞留

当我们同时使用单一类型的输入函数的时候,我们不需要清理缓冲区字符滞留

   例如:

当我们使用scanf函数读取hello\n的时候,缓冲区回滞留\n,当我们再次使用scanf的时候(不包括,这些函数不会直接读取\n,并不会发挥原本函数的功能

   注意:

全部使用 `scanf()` 时不需要清理缓冲区,但格式字符串要正确:
1.数字/字符串输入:`%d`、`%f`、`%s` 会自动跳过空白符(包括 `\n`)。【空白符是指在屏幕上不可见,但具有特殊作用的字符,例如:空格,转义字符】
2.字符输入:`%c` **不会跳过空白符**,必须加空格(如 `" %c"`)。因为%c并不会像其他形式一样会自动跳过空白符,
在 `%c` 前加一个空格(即 `" %c"`),会**让 `scanf` 跳过所有前导空白符**,直到遇到第一个非空白字符。

http://www.lryc.cn/news/620618.html

相关文章:

  • 计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
  • 疏老师-python训练营-Day45Tensorboard使用介绍
  • Effective C++ 条款40:明智而审慎地使用多重继承
  • 给植物浇水
  • 计算机视觉CS231n学习(8)
  • 飞算 JavaAI 云原生实践:基于 Docker 与 K8s 的自动化部署架构解析
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • Product Hunt 每日热榜 | 2025-08-14
  • wpf 保姆级实现visual studio里面的属性窗口 深度解析属性网格(PropertyGrid)实现原理与高级定制
  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • DOCKER设置日志轮转
  • 爬虫逆向之滑块验证码加密分析(轨迹和坐标)
  • Redis 03 redis 缓存异常
  • 嵌入式学习笔记--MCU阶段--DAY12实时操作系统rt_thread1
  • C语言零基础第16讲:内存函数
  • 华为实验WLAN 基础配置随练
  • 【奔跑吧!Linux 内核(第二版)】第6章:简单的字符设备驱动(三)
  • 使用AI编程自动实现自动化操作
  • 考研408《计算机组成原理》复习笔记,第三章(6)——Cache(超级重点!!!)
  • [免费]基于Python的影视数据可视化分析系统(Flask+echarts)【论文+源码+SQL脚本】
  • 财务自动化软件敏感数据泄露风险评估与防护措施
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘arviz’问题
  • Flutter 顶部导航标签组件Tab + TabBar + TabController
  • Polyak-Ruppert 平均
  • 第四天~什么是ARXML?
  • Eureka故障处理大汇总
  • Java研学-RabbitMQ(八)
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 【LeetCode 热题 100】295. 数据流的中位数——最大堆和最小堆
  • 基于Django的福建省旅游数据分析与可视化系统【城市可换】