小工具知识网

当前位置: 首页 > 行业知识 > Linux新手小程序——进度条

行业知识

Linux新手小程序——进度条

2026-11-16 05:53:31 来源:互联网转载

前言

���录

前言


需要先了解        1.\r和\n
                          2.缓冲区

一.理解字符的含义:

        学习c语言时,我们可以粗略把字符分为可显字符和控制字符.

        在按回车换到下一行开始的操作时,实际上是进行了两个操作:1.让光标跳到下一行(只是垂直向下,这一步的操作称为换行).2.让光标跳到最开始的位置(此操作称为回车).

        即\r:回车 \n换行。

        而在c语言环境下把\n简化 其代表回车加换行。

测试\n,\r:

\n,\r都存在,既有回车又有换行,所以其linux的命令行在我们执行程序下面。

只有\n

们在上面说了,这是我们在这个语言环境下我们将其简化,此时的\n就表示回车加换行。

\r \n都没有

linux命令就直接跟在文本行后面。

只有\r 

只有回车的效果,光标本来在文本行最后一个字符旁,回车后光标来到了文本行开始,最终导致文本被覆盖。 

 二,缓冲区的概念

#include#includeint main(){printf("hello world");sleep(3);}

运行上面代码会发现结果没有立马打印出来,这是因为数据在sleep期间被暂时保存起来。

但是如果加上\n,数据就会显示出来。————缓冲区有自己的行缓冲刷新策略。

三,小程序

1.倒计时小程序

  1 #include  2 #include  3   4 int main()  5 {  6   int i=0;  7   for(i=9;i>=0;i--)  8   {  9     printf("%d\r",i); 10               11     sleep(1); 12   } 13   return 0; 14 }

我们利用\r覆盖的特性实现如上代码,但是结果倒计时却不显示,原因是数据存放在缓冲区里,缓冲区没有被刷新。我们将代码修改如下:

1 #include  2 #include  3   4 int main()  5 {  6   int i=0;  7   for(i=9;i>=0;i--)  8   {  9     printf("%d\r",i); 10     fflush(stdout);             11     sleep(1); 12   } 13   return 0; 15 }
1 #include  2 #include  3   4 int main()  5 {  6   int i=0;  7   for(i=9;i>=0;i--)  8   {  9     printf("%-2d\r",i); 10     fflush(stdout);             11     sleep(1); 12   } 13   return 0; 15 }~

2.进度条

进度条的预期样式:[#########################################] [%100] [/]

    第一个括号是进度条 第二个括号是进度百分比 第三个是旋转图标 用于判断是否卡住。

编写

proc.h,编写进度条的头文件
proc.c,编写进度条的函数
main.c,测试进度条

proc.h

 1  #pragma once                         2   3  #include   4   5 void process();   ~                        

main.c

 1 #include "proc.h"  2   3 int main()  4 {  5   process();  6   return 0;                      7 }

proc.c

  1 #include"proc.h"  2 #include  3 #include  4   5 //  "|/-\"旋转标志  6 void process()  7 {  8   const char* lable ="|/-\";        //特殊字符\需要用\  9  10   //为什们要定义101个字符? 11   //就是因为我们的进度条有100个 12   //但是字符的结尾要用表示所以我们要有101个字符 13   char bar[101]; 14   //先将进度条设置为,然后在依次增加#。 15   memset(bar,'',sizeof(bar)); 16   int i=0; 17   while(i

上一篇:揭秘建立高效数据库的关键步骤与策略

下一篇:HTML实体编码详解,保障网页内容准确显示的必备秘籍