目錄
一、行緩沖區的概念
二、\r與\n
三、進度條代碼書寫與展示
1.如何表示進度條是在加載的
2.整體框架
3.書寫
3.1makefile:
3.2process.h:?
3.3process.c:
3.4main.c:
3.5美化?
一、行緩沖區的概念
首先,我們來見一見行緩沖區,對比下面兩個代碼就可以理解了。
這個的結果毋庸置疑了就是:
那么如果我們修改一下這個代碼呢,比如這樣:
結果又如何呢,我們運行一下:
我們驚奇的發現,居然和原來完全不一樣,這個代碼顯示的是先休眠3秒再打印出hello world。
這也就說明了有行緩沖區的存在。
顯示器對應的是行刷新,即當緩沖區當中遇到\n'或是緩沖區被寫滿才會被打印出來,而在第二份帶碼當中并沒有\n,所以字符串hello world先被寫到緩沖區當中去了,然后休眠3秒后,直到程序運行結束時才將hello world打印到顯示器當中。?
二、\r與\n
\r:回車,讓光標回到行首(類似于之前的打字機)
\n:換行,讓光標來到下一行
而我們電腦鍵盤上面的enter鍵就是\r+\n(老式鍵盤的enter鍵的形狀也說明了這一點)
既然是是使光標回到本行行首,那么如果我們向顯示器上寫了一個數之后再讓光標回到本行行首,然后再寫一個數,不就相當于將前面一個數字覆蓋了嗎?
但這里有一個問題:不使用"\n’進行換行怎么將緩沖區當中數據打印出來?
這里我們可以使用fflush函數,該函數可以刷新緩沖區,即將緩沖區當中的數據刷新當顯示器當中。基于這個特性我們可以編寫一個倒計時的程序。?
光標回到行首再打印就實現了倒計時的效果:
三、進度條代碼書寫與展示
根據上面的基本知識,我們就可以寫一個進度條的代碼了。
1.如何表示進度條是在加載的
有的時候們在下載東西的時候,進度條可能會卡著不動,但是確實是在運行,我們該怎么表示呢?
這里我夢可以設置一個標記在隨機改變形狀,就可以知道是不是在運行了。
例如:
const char *lable="|/-\\";?
在這幾個符號之間切換。
2.整體框架
我們為了實現下載功能,我們可以模擬實現一個下載的場景,設置總的下載數據的值,然后設置speed值,用休眠時間模擬下載的速度。for()循環模擬正在下載數據。
3.書寫
3.1makefile:
實現多文件編譯
3.2process.h:?
3.3process.c:
3.4main.c:
效果展示:
3.5美化?
如果你覺得這樣有點單調,你也可以加上顏色,關于ANSI顏色轉義序列可以到網上找到。
改進后:
效果展示: