Linux新手小程序——进度条
前言
目录
需要先了解 1.\r和\n
2.缓冲区
一.理解字符的含义:
学习c语言时,我们可以粗略把字符分为可显字符和控制字符.
在按回车换到下一行开始的操作时,实际上是进行了两个操作:1.让光标跳到下一行(只是垂直向下,这一步的操作称为换行).2.让光标跳到最开始的位置(此操作称为回车).
即\r
:回车 \n
换行。
而在c语言环境下把\n简化 其代表回车加换行。
测试\n,\r:
\n,\r都存在,既有回车又有换行,所以其linux
的命令行在我们执行程序下面。
只有\n
们在上面说了,这是我们在这个语言环境下我们将其简化,此时的\n
就表示回车加换行。
\r \n都没有
linux命令就直接跟在文本行后面。
只有\r
只有回车的效果,光标本来在文本行最后一个字符旁,回车后光标来到了文本行开始,最终导致文本被覆盖。
二,缓冲区的概念
-
-
-
-
int main()
-
{
-
printf("hello world");
-
sleep(3);
-
}
运行上面代码会发现结果没有立马打印出来,这是因为数据在sleep期间被暂时保存起来。
但是如果加上\n,数据就会显示出来。————缓冲区有自己的行缓冲刷新策略。
三,小程序
1.倒计时小程序
-
1
-
2
-
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
-
2
-
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
-
2
-
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.进度条
进度条的预期样式:[#########################################] [0] [/]
第一个括号是进度条 第二个括号是进度百分比 第三个是旋转图标 用于判断是否卡住。
编写
proc.h
,编写进度条的头文件proc.c
,编写进度条的函数main.c
,测试进度条
proc.h
-
1
-
2
-
3
-
4
-
5 void process(); ~
main.c
-
1
-
2
-
3 int main()
-
4 {
-
5 process();
-
6 return 0;
-
7 }
proc.c
-
1
-
2
-
3
-
4
-
5 // "|/-\"旋转标志
-
6 void process()
-
7 {
-
8 const char* lable ="|/-\\"; //特殊字符\需要用\\
-
9
-
10 //为什们要定义101个字符?
-
11 //就是因为我们的进度条有100个
-
12 //但是字符的结尾要用\0表示所以我们要有101个字符
-
13 char bar[101];
-
14 //先将进度条设置为\0,然后在依次增加#。
-
15 memset(bar,'\0',sizeof(bar));
-
16 int i=0;
-
17 while(i<=100)
-
18 {
-
19 printf("[%-100s] [%d%%] [%c]\r",bar,i,lable[i%4]);
-
20 fflush(stdout);
-
21 bar[i ]='#';
-
22 usleep(100000);
-
23 }
-
24 printf("\n");
-
25
-
26 }
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbkfce
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01