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

回车换行、缓冲区刷新、倒计时小程序

1 回车换行问题

回车换行并不是一个概念,回车是把光标移动到最开始的位置,换行是将光标移动到下一行

\r是回车符 \n是换行符,不过在语法上单独的换行没有意义,因此\n是回车换行两个功能的结合

2 用户缓冲区问题

先看一段代码

#include<sdio.h>
#include<unistd.h>
int main()
{printf("hello");sleep(3);return 0;
}

我们在执行程序时可以明显的感受到,光标停顿了3秒后才输出,这是为什么呢?

首先,我们可以确定,代码是从上到下执行的,也就是说先执行printf后执行sleep,那么在sleep休眠的时候printf打印的语句在哪里呢?

这就不得不提缓冲区了,事实上,printf语句并不是将字符串打印在显示器上,而是将其拷贝到缓冲区,而后再由缓冲区刷新到显示器,所以printf函数其实是拷贝函数

缓冲区的刷新策略是行刷新,即一行一行的刷新,行刷新符合我们人类的阅读习惯

两种情况会发生刷新:

1 \n之前的的所有内容会被刷新到显示器

2 程序退出的时候曾经的历史数据会刷新

上面的程序显然是因为printf中没有\n,所以程序退出的时候缓冲区中的内容才被刷新到显示器上

那我们可不可以强制刷新呢?

当然可以,这时我们就需要用到fflush函数了

我们可以看到,这次是输出hello,后休眠

3 补充

浅浅的了解一个小知识,字符设备

定义:字符设备是一种以字符为单位进行数据传输的设备,通常用于输入输出操作,如键盘、鼠标、打印机等。它与块设备相对,块设备以固定大小的数据块为单位进行数据传输,如硬盘、光驱等。

显示器就是一种字符设备

现在问大家一个问题

int a=123456;
printf("%d",123456);
int b;
scanf("%d",&b);

printf在显示器打印的a是整数还是字符?

其实是一个一个的字符,一共6个字符

printf、scanf都是格式化输入输出函数,prinf就是把如“%d”类型的数据格式化为字符类型,scanf就是把字符类型格式化为别的数据类型

4 倒计时小程序

#include <stdio.h>
#include <unistd.h>
int main()
{int i = 10;while(i >= 0){printf("%d\r", i); // \nfflush(stdout);i--;sleep(2);}printf("\n");return 0;
}

这种情况也可以侧面证明printf打印的是字符,10是两个字符而9…0是一个字符,因此只能覆盖一个字符的位置

要解决这种情况,只需让i要占用两个字符位置,并保持左对齐

printf("%-2d\r", i);

到此,回车换行、缓冲区刷新、倒计时小程序就讲完了,怎么样,是不是感觉大脑里面多了很多新知识。

如果觉得博主讲的还可以的话,就请大家多多支持博主,收藏加关注,追更不迷路

如果觉得博主哪里讲的不到位或是有疏漏,还请大家多多指出,博主一定会加以改正

博语小屋将持续为您推出文章

http://www.xdnf.cn/news/1394857.html

相关文章:

  • MQTT高延迟通信优化指南
  • Python的Listd 数据格式 V0.1
  • 深入解析Nginx核心模块
  • DAY 17 常见聚类算法-2025.8.29
  • 将数据赋值到多个文档里,并将多个word放入压缩包并下载
  • 非标设计 机架模板 misumi 设计组合案例
  • 小康AI家庭医生,亮相2025WteamAI创客节!
  • 【51单片机】【protues仿真】 基于51单片机智能视力保护台灯系统
  • 13 SQL进阶-InnoDB引擎(8.23)
  • Elasticsearch 9.X 使用推理 API 进行语义搜索
  • 2025年06月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 《跳出“技术堆砌”陷阱,构建可演进的软件系统》
  • opencv基础学习与实战之轮廓分析与模板匹配(4)
  • Wi-Fi 时延与掉包的关键因素全解析
  • 整理python接口自动化相关——10、自动考虑点(待续)
  • 【51单片机定时1秒中断控制流水灯方向】2022-11-14
  • 实现动态数组
  • 听听广播 安卓网络收音机v2.1.6 支持定时闹钟回听各地电台
  • MySQL高频问题:事务及慢SQL优化全解析
  • 今天聊聊支付里的三个小概念:同名充值、非同代付和 D0。
  • 第0记 cutlass 介绍及入门编程使用
  • Go初级之五:结构体与方法
  • 【leetcode】114. 二叉树展开为链表
  • 【Rust】 6. 字符串学习笔记
  • app怎么防止被攻击被打有多少种防护方式?
  • 税务岗位能力提升培训课程推荐
  • 达梦数据库-数据缓冲区 (二)
  • 【Flask】测试平台开发,产品管理实现编辑功能-第六篇
  • 接吻数问题:从球体堆叠到高维空间的数学奥秘
  • 机器学习 - Kaggle项目实践(5)Quora Question Pairs 文本相似