簡單實現乙個進度條並剖析原理

2021-07-27 02:47:57 字數 1577 閱讀 4845

我們要實現關於乙個進度條,我們的想法是採用for迴圈的方式,所以對於這個進度條,我們需要從下面幾個問題來一一看待問題。

這兩個符號,乙個叫做回車,乙個叫做換行,好多人對這兩個分不清,所以我們在這裡需要介紹一下。 

在最早的時候,只有打字機的時候,人們在每行的後面加上兩個表示結束的字元,乙個叫做回車,它把打字機的游標定位在左邊界,另外乙個是換行,它用來換到下一行,這個就是所說的回車和換行的由來。

對於在linux和windows當中,』\r』和』\n』的方式也是有區別。 

在windows,每行的結尾是回車+換行, 

在linux下,每行的結尾是換行。

linux中遇到換行符(「\n」)會進行回車+換行的操作,回車符反而只會作為控制字元(「^m」)顯示,不發生回車的操作。而windows中要回車符+換行符(「\r\n」)才會回車+換行,缺少乙個控制符或者順序不對都不能正確的另起一行。

對於這個區別,同樣影響了我們在windows平台下和linux下使用fopen函式開啟文字檔案的時候,在我前期在乙個專案,檔案壓縮專案中曾經遇到過這樣的問題,當我們將windows按照文字的方式進行讀取的時候,這個時候會把每行最後讀出兩個字元,乙個換行乙個回車。所以當時我們最終採用了二進位制的方式進行讀取。

清楚了這個概念,所以我們接下來進行進度條的操作時,我們只需要進行每次的』\r』,這樣我們就可以每一次進行對該行的重新列印。最終,就可以實現所要求的乙個進度條功能。

我們通過對作業系統的學習,知道了對於我們所printf列印的內容,那麼就是需要將內容首先放到記憶體,讓後通過記憶體提供內容給顯示器顯示。但是對於作業系統來說,顯示器是乙個外設,速度慢,所以為了平衡,提供了乙個緩衝區來進行操作,記憶體吧資料給了緩衝區,接下來的輸出就由緩衝區進行操作了,記憶體就不管了。

linux下的每乙個程序會維護乙個print/scanf的緩衝區,對於緩衝區而言,緩衝區有乙個概念叫做緩衝方式,就是說達到一定的方式,緩衝區的內容才會被重新整理。

標c庫函式自帶緩衝區 ,常見的三種緩衝方式: 

(1)行緩衝:遇到」\n」,就會重新整理緩衝區 

(2)全緩衝:把緩衝區寫滿,再進行重新整理緩衝區 

(3)無緩衝:系統呼叫函式無緩衝區(如:write)

預設情況下,一般採用行緩衝方式。

當程式退出緩衝區自動重新整理,也就是乙個程序結束的時候,當使用scanf也會重新整理。 

所以,為了每次進行列印每行的內容,我們需要採用強制重新整理緩衝區,這裡有乙個函式fflush()。

好,接下來的列印就是輕鬆加愉快。 

所以框架我們已經搭建好了,剩下的我們就是進行考慮寫法了,為了實現整個進度條,我們模仿linux下的那種進度條,我們給乙個定長陣列實現。

shell實現乙個簡單進度條

用命令test或 測試乙個條件是否成立。如果測試條件為真,命令的exit status為0,測試條件為假,exit status為1。這裡輸入的數字比10大,條件成立為0,比10小條件不成立為1.整數比較 lt 小於 le 小於等於 gt 大於 ge 大於等於 eq 等於 ne 不等於 測試命令 與...

實現乙個簡單的進度條

1 首先我們用固定在左右兩邊,中間預留空間,然後用 進行填充在這裡我們用 表示1 通過增加字元 來保證進度的增加。printf 100s r str 格式化輸出。表示左對齊 100表示列寬,r 表示回車,即每 次列印完使游標回到行首在這裡需要解釋一下 r 和 n 這兩個概念 回車 r 表示回到當前行...

實現乙個彩色進度條

顯示序列 033 0m 關閉轉義序列 033 1m 粗體或高亮 033 5m 閃爍 前景顏色序列 033 30m 黑 033 31m 紅 033 32m 綠 033 33m 黃 033 34m 藍 033 35m 洋紅 033 36m 青 033 37m 白 背景顏色序列 與前景顏色對對應,前景色是...