[C/Linux练习]进度条小程序

news2024/12/25 12:50:52

前置知识点

\n\r

\n
换行,但只是垂直向下,并不水平移动。
\r
回车,返回当前行的头部。
光标返回头部后再打印,会从头开始覆盖之前打印在该行的内容。
printf的\n默认解释成换行+回车。
光标是与显示器匹配的,光标在哪里,显示器上的打印就从哪里开始。
\r\n本质上是用于控制光标的位置。
所有printf向显示器打印的内容,都是字符。

缓冲区

例1:

#include<stdio,h>
int main(){
	printf("hello world\n");
	sleep(1);
	return 0;
}

例2:

#include<stdio,h>
int main(){
	printf("hello world");
	sleep(1);
	return 0;
}

例1字符串后跟了 ’ \n ’ ,编译运行,文本会被直接打印出来;
例2字符串后没跟 ’ \n ',编译运行,文本会等待1秒再被打印出来。

1.程序执行默认按顺序结构执行(无判断、循环的情况下),所以printf一定先于sleep执行,但是先执行不代表内容会先显示,printf的确执行了但是没有显示出来,然后执行了sleep休眠。当sleep结束,程序退出时,文本才被刷新出来。
2.执行sleep休眠的时候 ,printf已经执行完打印了,要打印的数据存放在缓冲区。当sleep执行完,程序退出时,缓冲区的数据才被刷新,打印到终端上。
3.’ \n '是行缓冲,行缓冲策略会在遇到换行符时刷新,进而打印。
4.在没有 ’ \n '的情况下刷新——fflush(stdout) 刷新标准输出流。

缓冲区中的内容只有在刷新时才会打印在屏幕上。

代码与运行效果

proc.h

#pragma once 
#include <stdio.h>
             
extern void process();  

main.c

#include "proc.h"

int main(){
	process();                                                                                                     
	return 0;
}

proc.c

#include "proc.h"    
#include <string.h>    
#include <unistd.h>    
    
#define SIZE 102//确保容纳>和\n    
#define STYLE '#'    
#define ARR '>'    
    
void process(){    
  const char *lable = "-+x*";    
  char bar[SIZE];    
  memset(bar,'\0',sizeof(bar));//将bar的元素全部初始化为\0    
  int i=0;    
  while(i<=100){//0%-100%一共循环101次    
    printf("[\033[43;32;32m%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);//预留100个字符的位置,负号是从左向右(默认是右对齐)。%%比\%更通用。                                                                                              
    fflush(stdout);    
    bar[i++]=STYLE;//第101个#不会被打印出来,因为循环条件不再满足    
    if(i!=100){    
      bar[i]=ARR;    
    }    
    usleep(100000);//usleep单位为微秒    
  }    
  printf("\n");    
} 

运行效果

请添加图片描述

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

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

相关文章

基于PHP的宠物社会化小程序

摘要随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Java集合面试题

集合容器概述 什么是集合 集合框架&#xff1a;用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容&#xff1a;对外的接口、接口的实现和对集合运算的算法。 接口&#xff1a;表示集合的抽象数据类型。接口…

AlexNet,VGG,NiN,GoogleNet,批量归一化

学着学着突然发现&#xff0c;数据分析numpy&#xff0c;matplotlib&#xff0c;pandas这一部分内容没学完&#xff0c;还有pytorch的一些代码没有学完&#xff0c;所以在看像AlexNet这一些代码实现的时候&#xff0c;很多都看不懂&#xff0c;也得慢慢的补上来了hhh。这一周花…

Ajax的学习笔记(包括原生的ajax,jquery,axios,fetch)

一、什么是ajax AJAX 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。 二、ajxa的创建使…

【尚硅谷】Java数据结构与算法笔记10 - 树结构的基础部分

文章目录一、二叉树1.1 为什么需要树结构1.1.1 数组存储方式的分析1.1.2 链式存储方式的分析1.1.3 树存储方式的分析1.2 树示意图1.3 二叉树的概念1.4 二叉树 - 遍历节点1.5 二叉树 - 查找指定节点1.6 二叉树 - 删除节点二、顺序存储二叉树2.1 顺序存储二叉树的概念2.2 顺序存储…

过气明星组合大衣哥、李嘉明、唐磊,谁录制祝福视频能价值100万

有人说大衣哥、李嘉明和唐磊&#xff0c;都属于过气的明星&#xff0c;只能说仁者见仁&#xff0c;智者见智了&#xff0c;毕竟每个人对事情的的看法不同&#xff0c;得到的结论也不会一样。大衣哥是农民歌唱家&#xff0c;本来就是泥腿子出身&#xff0c;就算有人气流量也不懂…

Ai检测人员穿衣规范系统 opencv

Ai检测人员穿衣规范系统可以通过opencvyolo深度学习技术对现场画面中人员穿衣自动检测&#xff0c;发现现场人员未正确按要求穿衣进行抓拍留档。OpenCV可以在不同的系统平台上使用&#xff0c;包括Windows&#xff0c;Linux&#xff0c;OS&#xff0c;X&#xff0c;Android和iO…

【数据安全】一起聊聊数据安全

信息安全的本质就是保护数据被合法地使用&#xff0c;或者一句话“让对的人看到对的数据&#xff01;”。 近来各种各样的安全名词满天飞&#xff0c;什么信息安全、网络安全、应用安全、数据安全、物联网安全、AI安全… 相应的法律、标准、资质、认证、安全方向产品、创业公司…

HTTP(类似TCP/TUP协议)、Tomact(对整个web操作的集成软件)、Servlet(动态显示,需要Tomcat才能运行)

javaWeb&#xff1a;web为网站&#xff0c;javaWab就是用java来解决web互联网领域的技术栈 B/S架构&#xff1a;Brower/Server&#xff0c;浏览器/服务器 架构模式&#xff0c;他的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器&#…

HBase RowKey设计和实现

HBase由于存储特性和读写性能&#xff0c;在OLAP即时分析中发挥重要作用&#xff0c;Rowkey的设计好坏关乎到HBase的使用情况。 我们知道HBase中定位一条数据需要四个维度的限制&#xff1a;RowKey&#xff0c;Column Family&#xff0c;Column Qualifier&#xff0c;Timestamp…

同源策略和跨域请求的实现

一、什么是同源策略 如果两个 URL 的 protocol、port (en-US) (如果有指定的话) 和 host 都相同的话&#xff0c;则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”&#xff0c;或者直接是“元组”。&#xff08;“元组”是指一组项目构成的整体&#xff0c;双重/…

C语言 文件操作 深度解析 #重点知识:文件操作函数的使用#

文章目录前言1. 为什么使用文件2. 什么是文件程序文件数据文件3. 文件的打开和关闭4. 文件的顺序读写fgetcfputcfgetsfputsfprintffscanf流的介绍fwritefread5. 文本文件和二进制文件6. 文件读取结束的判定被错误使用的feof7. 文件缓冲区写在最后前言 相信大家对文件都不陌生&a…

4、数据类型

目录 1. 基本类型 &#xff08;1&#xff09;数值类型 &#xff08;2&#xff09;字符类型 &#xff08;3&#xff09;布尔类型 2. 构造类型 3. 空类型 本文主要介绍基本数据类型。 1. 基本类型 基本类型也就是C语言中的基础类型&#xff0c;其中包括整型、字符型、浮点…

我的 git 实战记录

我的 git 实战记录 1. 将本次提交追加到上一次提交 1.1. 情景描述 有些时候&#xff0c;我提交东西太勤快了&#xff0c;导致有部分内容没有提交上去。分为两种情况&#xff1a; 已经 push 远程仓库还没有 push 到远程仓库 1.2. 已经 push到远程仓库 先 git add 提交修改…

Windows免费MQTT服务器搭建及使用

1、EMQ X&#xff08;简称 EMQ) 简介 EMQ的源代码完全开源&#xff0c;支持百万级并发连接&#xff0c;支持完整的MQTT协议&#xff0c;可以简单方便地部署在Linux、Mac OS X或Windows等平台上&#xff0c;支持MySQL、Redis等扩展插件&#xff0c;总的来说&#xff0c;EMQ满足…

Java设计模式-访问者模式Visitor

介绍 访问者模式&#xff08;Visitor Pattern&#xff09;&#xff0c;封装一些作用于某种数据结构的各元素的操作&#xff0c;它可以在不改变数据结构的前 提下定义作用于这些元素的新的操作。主要将数据结构与数据操作分离&#xff0c;解决 数据结构和操作耦合性问题访问者模…

day15|513.找树左下角的值、112. 路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

513.找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 问题分析&#xff1a; 递归法&#x…

【基础篇】3 # 数组:为什么很多编程语言中数组都从0开始编号?

说明 【数据结构与算法之美】专栏学习笔记 什么是数组&#xff1f; 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表和非线性表 线性表&#xff08;Linear List&#xff09;&#xff1…

第07章 面向对象编程(中级部分OOP)

文章目录IDE(集成开发环境)IDEA介绍idea运行包包的作用包基本语法包的本质分析(原理)包的命名命名规则命名规范常用的包如何引入包注意事项和使用细节访问修饰符【modifier】基本介绍使用的注意事项封装【encapsulation】介绍封装的好处和理解封装的实现步骤封装练习继承【exte…

【阶段四】Python深度学习02篇:深度学习基础知识:神经网络可调超参数:优化器

本篇的思维导图: 神经网络可调超参数:优化器 优化器相当于是用来调解神经网络模型的‘手柄’。 代码 # 编译神经网络,