前言
目錄
前言
需要先了解????????1.\r和\n
? ? ? ? ? ? ? ? ? ????????2.緩沖區(qū)
一.理解字符的含義:
? ? ? ? 學(xué)習(xí)c語言時,我們可以粗略把字符分為可顯字符和控制字符.
? ? ? ? 在按回車換到下一行開始的操作時,實際上是進行了兩個操作:1.讓光標跳到下一行(只是垂直向下,這一步的操作稱為換行).2.讓光標跳到最開始的位置(此操作稱為回車).
? ? ? ? 即\r
:回車?\n
換行。
????????而在c語言環(huán)境下把\n簡化 其代表回車加換行。
測試\n,\r:
\n,\r都存在,既有回車又有換行,所以其linux
的命令行在我們執(zhí)行程序下面。
只有\(zhòng)n
們在上面說了,這是我們在這個語言環(huán)境下我們將其簡化,此時的\n
就表示回車加換行。
\r \n都沒有
linux命令就直接跟在文本行后面。
只有\(zhòng)r?
只有回車的效果,光標本來在文本行最后一個字符旁,回車后光標來到了文本行開始,最終導(dǎo)致文本被覆蓋。?
?二,緩沖區(qū)的概念
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("hello world");
sleep(3);
}
運行上面代碼會發(fā)現(xiàn)結(jié)果沒有立馬打印出來,這是因為數(shù)據(jù)在sleep期間被暫時保存起來。
但是如果加上\n,數(shù)據(jù)就會顯示出來?!彌_區(qū)有自己的行緩沖刷新策略。
三,小程序
1.倒計時小程序
1 #include<stdio.h>
2 #include<unistd.h>
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覆蓋的特性實現(xiàn)如上代碼,但是結(jié)果倒計時卻不顯示,原因是數(shù)據(jù)存放在緩沖區(qū)里,緩沖區(qū)沒有被刷新。我們將代碼修改如下:
1 #include<stdio.h>
2 #include<unistd.h>
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 }
以上代碼我們會發(fā)現(xiàn)如果時間變成兩位數(shù),將只能覆蓋一位數(shù),因此修改為:
1 #include<stdio.h>
2 #include<unistd.h>
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.進度條
進度條的預(yù)期樣式:[#########################################] [%100] [/]
? ? 第一個括號是進度條 第二個括號是進度百分比 第三個是旋轉(zhuǎn)圖標 用于判斷是否卡住。
編寫
proc.h
,編寫進度條的頭文件proc.c
,編寫進度條的函數(shù)main.c
,測試進度條
proc.h
1 #pragma once
2
3 #include <stdio.h>
4
5 void process(); ~
main.c文章來源:http://www.zghlxwxcb.cn/news/detail-610089.html
1 #include "proc.h"
2
3 int main()
4 {
5 process();
6 return 0;
7 }
proc.c文章來源地址http://www.zghlxwxcb.cn/news/detail-610089.html
1 #include"proc.h"
2 #include<unistd.h>
3 #include<string.h>
4
5 // "|/-\"旋轉(zhuǎn)標志
6 void process()
7 {
8 const char* lable ="|/-\\"; //特殊字符\需要用\\
9
10 //為什們要定義101個字符?
11 //就是因為我們的進度條有100個
12 //但是字符的結(jié)尾要用\0表示所以我們要有101個字符
13 char bar[101];
14 //先將進度條設(shè)置為\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 }
到了這里,關(guān)于Linux新手小程序——進度條的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!