进度条(小程序)

缓冲区的概念

缓冲区是内存中的一个临时存储区域,用来存放输入或输出数据。在标准 I/O 库中,缓冲区的使用可以提高数据处理的效率。例如,当向终端输出文本时,字符通常存储在缓冲区中,直到缓冲区满或者遇到特定条件时才实际向终端设备输出。

标准 I/O 的缓冲类型

标准 I/O 流(如 stdout,即标准输出)可以有以下几种缓冲模式:

  1. 全缓冲(Fully Buffered):数据会积存在缓冲区中,直到缓冲区满了才进行实际的 I/O 操作。这通常用在对文件的操作中。

  2. 行缓冲(Line Buffered):数据会积存在缓冲区中,直到遇到换行符或缓冲区满了才进行输出。标准输出通常是行缓冲的,当它连接到终端设备时。

  3. 无缓冲(Unbuffered):数据立即从程序传送到输出设备,stderr 通常是无缓冲的。

int main()
{printf("hellow world     ");sleep(3);return 0;
}

示例代码的缓冲行为

在您的示例代码中,printf("you can see me ") 输出一个字符串。由于这个字符串后面没有换行符(\n),并且程序随后执行了 sleep(3),所以这个字符串可能会停留在行缓冲中,直到程序结束或缓冲区满才会被实际输出。如果程序是在一个终端上运行,可能会有短暂的延迟,在 sleep 完成后,这条信息才显示在屏幕上。

强制刷新缓冲区

如果希望即使没有换行符也能立即看到输出,可以使用 fflush(stdout) 来强制刷新标准输出的缓冲区,使得所有缓冲的数据被立即写出: 

printf("you can see me ");
fflush(stdout);  // 强制刷新缓冲区,立即输出上面的文本
sleep(3);

回车+换行

回车(Carriage Return, CR)和换行(Line Feed, LF)是两个历史上用于表示文本行结束的控制字符,它们的使用和含义随操作系统的不同而有所变化。

回车 (CR)

  • 符号\r
  • ASCII 码:13
  • 用途:在打字机和早期的计算机打印设备中,回车指令使打印头回到行首的位置。

换行 (LF)

  • 符号\n
  • ASCII 码:10
  • 用途:在打字机和计算机打印设备中,换行指令使打印头下移一行。

不同操作系统中的使用

  1. Windows

    • 在 Windows 系统中,行结束符是回车加换行的组合(\r\n)。这种组合使得打印头首先回到行首(CR),然后向下移动到下一行(LF),这对应了早期打字机的操作。
  2. Unix/Linux

    • Unix 和 Linux 系统只使用换行(\n)作为行结束符。这简化了处理过程,因为大多数文本编辑和显示操作都默认新行开始于当前位置的下一行。
  3. Mac OS

    • 早期的 Mac 操作系统(如 Mac OS 9 及之前版本)使用单独的回车(\r)作为行结束符。但从 Mac OS X 开始,它转向了 Unix 风格,使用单独的换行(\n)。

编程和网络协议中的影响

在编程和数据交换中,不同的行结束符标准经常导致跨平台的文本处理问题。例如,一个在 Windows 上创建的文本文件可能会在 Unix/Linux 系统中显示为带有额外空白字符的长行,反之亦然。因此,许多现代文本编辑器和开发工具提供了自动检测或转换行结束符的功能。

在网络协议(如 HTTP)中,规定必须使用 \r\n 来结束一行,以确保协议的统一和兼容。

一个小的倒计时代码

int main()
{int cnt = 10;while(cnt){printf("%-2d\r", cnt);fflush(stdout);cnt--;sleep(1);}printf("\n");return 0;
}

这段 C 程序是一个从 10 倒数到 1 的倒计时器。它使用 printf 函数和 \r(回车)来在同一行上更新数字,每次更新前都会将光标移回行首。fflush(stdout) 确保每次打印的数字都能立即显示出来,而 sleep(1) 让程序每打印一个数字后暂停一秒。最后,程序在倒计时结束后输出一个换行符,然后结束。

一个简易的进度条代码

#include <stdio.h>
#include <unistd.h>  
#include <string.h>#define MAX 101
#define LABEL '='  int main()
{char bar[MAX];memset(bar, '\0', sizeof(bar));  // 初始化数组,设置为全部是 null 字符int i = 0;while(i < 100){printf("%s\r", bar);fflush(stdout);  // 刷新输出,确保每次循环的内容都能立即显示bar[i++] = LABEL;  // 将当前位置的字符设置为 LABELusleep(100000);  // usleep 参数单位是微秒,100000 微秒等于 0.1 秒}printf("\n");  // 正确地输出一个换行符,原代码中写的是 %nreturn 0;
}

这段 C 程序创建了一个逐步填充的进度条。它初始化一个字符数组,然后在循环中逐个添加等号 ('=') 到数组中,并实时在终端显示更新的进度条,每次更新间隔0.1秒。循环完成后,程序输出一个换行符,以整洁地结束显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX&#xff0c;通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了&#xff0c;无法应用于真实直播的生产环境&#xff0c;真正能用于生产环境…

HarmonyOS开发之ArkTS使用:新建活动页面

目录 目录 引言 关于ArkTS 开发环境准备 新建项目 新建活动页面 编写ArkTS代码 注册页面 运行应用 最后 引言 随着HarmonyOS&#xff08;鸿蒙操作系统&#xff09;的不断发展&#xff0c;越来越多的前端开发者投入到这个全新的生态系统中。而在HarmonyOS的开发中&…

自我模拟面试

在面试中&#xff0c;你如何面对面试官呢&#xff1f; 我认为&#xff0c;对于面试官提出的问题&#xff0c;如果你不会&#xff0c;那就是不会。你的思考过程&#xff0c;实际上就是将你平时所学的&#xff0c;所了解的&#xff0c;在脑海中进行一次复习&#xff0c;就像当别…

线上副业新选择:宅家工作,4个项目助力增收!

在这个繁华世界&#xff0c;财富与智慧并驾齐驱。越来越多的人意识到&#xff0c;除了主业外&#xff0c;开拓一份副业是实现财富增长的重要途径。在此&#xff0c;我为大家精心挑选了几个值得一试的网上赚钱副业。 1&#xff0c;参与网络调查与问卷填写 随着大数据时代的到来…

[大师C语言(第三篇)]C语言函数参数背后的秘密

C语言函数参数背后的秘密&#xff08;一&#xff09; 在C语言中&#xff0c;函数是执行特定任务的一段代码&#xff0c;可以通过参数传递数据。函数参数是C语言中非常基本且重要的概念&#xff0c;但它们背后的技术原理可能并不为人所熟知。本文将深入探讨C语言函数参数的技术…

kkkkkkkkkkkk564

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 人工智能与机器学习 &#x1f4dd;人工智能相关概念☞什么是人工智能、机器学习、深度学习☞人工智能发…

UINXU

进入选项字节配置界面之后&#xff0c;从上到下框选的部分依次是读保护、用户配置部分、自定义的两个字节和写保护&#xff0c;这四个部分的配置也是可以直接点击就可以配置。 写保护点一下是四页同时打钩&#xff0c;对应选项字节里的一个位配置4个闪存页 配置完成之后点击…

YOLOv8 Tensorrt Python/C++部署详解

按照大佬的方法进行部署&#xff0c;但是中间出现了很多问题&#xff0c;这里进行一下总结。 YOLOv8 Tensorrt Python/C部署教程_yolo 安装tensorrt-CSDN博客https://blog.csdn.net/weixin_45747759/article/details/130341118 Monday-Leo/Yolov5_Tensorrt_Win10: A simple i…

Kafka从0到消费者开发

安装ZK Index of /zookeeper/zookeeper-3.9.2 下载安装包 一定要下载-bin的&#xff0c;不带bin的是源码&#xff0c;没有编译的&#xff0c;无法执行。-bin的才可以执行。 解压 tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz 备份配置 cp zoo_sample.cfg zoo_sample.cfg-b…

物流集成商巨头-员工薪酬PK:今天国际、音飞存储,诺力股份

语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 以下内容为根据上市财报和公开数据整理&#xff0c;若有偏差&#xff0c;请联系小编修改。注意&#xff1a;各公司员…

ZYNQ实验--裸机程序固化

参考资料 正点原子《领航者 ZYNQ 之嵌入式 SDK 开发指南》详细的配置资料中都有介绍&#xff0c;本文只针对个人实验需求进行简要说明 固化流程 调试阶段是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。但在实际应用中需要程序在上电或者复位时让程序自动运…

Adversarial Synthesis of Human Pose From Text # 论文阅读

URL https://arxiv.org/pdf/2005.00340 TD;DR 20 年 5 月来自高校的一篇论文&#xff0c;任务是用 GAN 生成 pose&#xff0c;目前 7 引用。 Model & Method 输入的是描述动作的 text&#xff0c;通过 text encoder&#xff08;本文用的是叫做 fastText 的方法&#…

vue-element-template优化升级dart-sass、pnpm

1、替换 node-sass 为 dart-sass - "node-sass": "^4.9.0","sass": "^1.75.0",替换css深度作用域写法 /deep/ >>># 替换为::v-deepVue&#xff1a;Node Sass VS. Dart Sass 2、替换npm为pnpm&#xff0c;需要补充一些依赖…

迷宫中离入口最近的出口

题目链接 迷宫中离入口最近的出口 题目描述 注意点 maze[i][j] 要么是 ‘.’ &#xff0c;要么是 ‘’entrance.length 2entrance 一定是空格子出口的含义是 maze 边界上的空格子entrance格子不算出口 解答思路 广度优先遍历找到走i步时所能到达的所有节点位置&#xff0…

从零手写实现 tomcat-05-servlet 处理支持

创作缘由 平时使用 tomcat 等 web 服务器不可谓不多&#xff0c;但是一直一知半解。 于是想着自己实现一个简单版本&#xff0c;学习一下 tomcat 的精髓。 系列教程 从零手写实现 apache Tomcat-01-入门介绍 从零手写实现 apache Tomcat-02-web.xml 入门详细介绍 从零手写…

认识 Pixel 8a:这款 Google AI 手机拥有无与伦比的价值。

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

代码随想录训练营Day27:贪心算法05区间问题

1.435无重叠区间 思路&#xff1a;可以延续前面的引爆气球的思路&#xff0c;所以本题的贪心策略为&#xff1a;对于相同起始位置的&#xff0c;删去终点位置靠右的&#xff0c;只留下一个最靠左的。对于具有不同的起始位置的&#xff0c;但是存在重复的情况&#xff08;即当前…

html+css-Day1(盒子模型)

一、常用属性 1、字体设置font "line-height" 是 CSS 中的一个属性&#xff0c;用于设置文本行之间的距离&#xff0c;也就是行间距。它影响着段落、行内元素或者任何包含文本的元素的可读性。"line-height" 可以设置为数字、长度单位&#xff08;如 px、e…

数据结构——希尔排序

基本思想&#xff1a; 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述…

【代码随想录算法训练Day3】LeetCode 203.移除链表元素、LeetCode 707.设计链表、LeetCode 206.反转链表

Day3 链表 链表也是一种很重要的数据结构&#xff0c;链表的优势是空间不必连续&#xff0c;分配比较自由&#xff0c;缺点是不支持随机访问&#xff0c;想要获取链表中间的某个元素&#xff0c;必须要从头遍历。 LeetCode 203.移除链表元素【虚拟头结点】 移除链表中的某个…