網(wǎng)站建設(shè)后續(xù)需要維護怎么用網(wǎng)絡(luò)推廣
前言
目錄
前言
需要先了解????????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
1 #include "proc.h"2 3 int main()4 {5 process();6 return 0; 7 }
proc.c
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 }