目錄
????????一、\r和\n的理解
????????二、行緩沖區(qū)概念
????????三、進度條源代碼
一、\r和\n的理解
\r:回車;
\n:換行;
? ? 那么請問這兩個有什么區(qū)別呢?
? ? 比如:我們在編寫內(nèi)容的時候,一行沒有寫完的情況下,需要換到下一行的開始位置,此時需要兩個步驟:
? ? (1)讓光標從第一行跳到第二行,但是光標只是垂直向下跳,并沒有在第二行的開始。這個操作就是換行(\n)。
? ? (2)在第二行讓光標跳到最開始的位置,這個操作就是回車(\r)。
????話不多說,我們進行下面的例子,就可以一目了然,
? ? <1>\n和\r都存在
?既有回車又有換行,所以執(zhí)行完命令之后,光標會在下一行的開頭。
?
? ? <2>?\n存在
只有換行的時候,我們運行出來和上面第一種情況相同,原因是,在C語言環(huán)境下,自動將其簡化,此時的\n就表示回車加換行。
? ? ?<3>\r存在?
只有回車,我們可以想象到運行的結(jié)果是什么樣,答案是:什么都不顯示。為什么呢?
- 回車之后,光標來到了文本行的開始位置,此時linux的命令行就會從光標處開始,將我們的文本覆蓋掉,我們就什么也看不到。
?
二、行緩沖區(qū)概念
首先先看看下面3段代碼的現(xiàn)象:?
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello world!\n");
sleep(3);
return 0;
}
結(jié)果:直接打印出hello world!,然后停留3秒之后換行給出新的命令。??
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello world!");
sleep(3);
return 0;
}
剛開始不顯示,停留3秒之后,在一行中顯現(xiàn)hello world!和新的命令行。??
說明在剛開始運行的時候,數(shù)據(jù)被存在行緩沖區(qū)中的,3秒過后,才刷新出來。
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello world!");
fflush(stdout);
sleep(3);
return 0;
}
?直接顯現(xiàn)hello world!,然后停留3秒之后,在其后面直接給出新的命令行。
三、進度條源代碼
(1)proc.h
#pragma once
#include <stdio.h>
void process();
(2)proc.c?
void process()
{
const char *lable = "|/-\\";
char bar[SIZE];
memset(bar,0,sizeof(bar));
int i = 0;
while(i<=100)
{
printf("\033[42;32;31m[%-100s\033[0m][%d%%][%c]\r",bar,i,lable[i%4]);
fflush(stdout);
bar[i++]=STYLE;
usleep(100000);
}
printf("\n");
}
(3)main.c?
#include "proc.h"
int main()
{
process();
return 0;
}
運行結(jié)果:
?本文要是有不足的地方,歡迎大家在下面評論,我會在第一時間更正。文章來源:http://www.zghlxwxcb.cn/news/detail-459174.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-459174.html
?老鐵們,記著點贊加關注!!!
到了這里,關于【Linux】Linux小程序-進度條的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!