最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言進(jìn)度條的實(shí)現(xiàn)原理詳解

 更新時(shí)間:2022年08月29日 10:01:53   作者:小小酥誒  
這篇文章主要介紹了C語(yǔ)言進(jìn)度條的實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

\r和\n

在程序里面,\r\n分別代表什么意思?

\r:表示“回車”,即回到當(dāng)前行的起始位置

\n:表示換行,即列不變,另其一個(gè)新行

行緩沖區(qū)

什么是行緩沖區(qū)?先別慌,來(lái)看代碼一執(zhí)行會(huì)是什么樣的狀態(tài)。

//代碼一,mytest.c文件
# include <stdio.h>
int main(void)
{
  printf("hello linux");                                                                                                                                    
  sleep(1);
  return 0;
}

現(xiàn)象:光標(biāo)休息一秒后,打印出hello linux。

那這個(gè)現(xiàn)象是不是說(shuō)明了,sleep先執(zhí)行,printf函數(shù)后執(zhí)行呢?

并不是的,在執(zhí)行sleep函數(shù)之前printf函數(shù)已經(jīng)被執(zhí)行了,只是數(shù)據(jù)暫時(shí)存放到了行緩沖區(qū)內(nèi),沒(méi)有立即刷新出來(lái)。行緩存區(qū)只有在輸入和輸出中遇到換行符時(shí),緩沖區(qū)才立即刷新,然后把數(shù)據(jù)傳給磁盤,執(zhí)行真正的I/O操作。

有了一個(gè)認(rèn)知后

//代碼二,mytest.c文件
 # include <stdio.h>
 int main(void)
 {
   printf("hello linux\r");//添加了回車                                                                                                                                    
   sleep(1);
   return 0;
 }

因?yàn)閮?nèi)容被放到了行緩沖區(qū)內(nèi),刷新緩沖區(qū)的時(shí)候,hello linux本來(lái)是刷新出來(lái)了的,但是由于有一個(gè)\r回車符,然后又回到了行首的位置,導(dǎo)致數(shù)據(jù)被覆蓋了。所以休眠了一秒之后,什么也沒(méi)有被顯示到屏幕上。

進(jìn)度條

根據(jù)上面的行緩存區(qū)的知識(shí)

總結(jié)出進(jìn)度條的一個(gè)制作方法:

假設(shè)以#作為進(jìn)度條的一個(gè)顯示,第一次輸出#,立即刷新出來(lái);利用\r回車的知識(shí),第二次讓它回到改行行首的位置,輸出##,立即刷新出來(lái);同樣的第三次回到該行行首,然后輸出###……

想法很美好,理論可以成功,開(kāi)始實(shí)踐……

 # include <stdio.h>
 # include <string.h> //別忘記包含memset函數(shù)的頭文件
 int main(void)
 {
   char buffer[102]; //開(kāi)辟一個(gè)能容納102個(gè)字符的數(shù)組
   memset(buffer, 0, sizeof(buffer));//將字符數(shù)組的每一個(gè)字節(jié)都初始化為0
   int i = 0;
   while(i <= 100)
   {
     printf("[%-100s][%d%%]\r", buffer, i); //控制輸出的格式
     fflush(stdout); //立即刷新標(biāo)準(zhǔn)輸出流                                                                                                                      
     buffer[i++] = '#'; //把i下標(biāo)的空間初始化為#之后,++i
     usleep(50000); //因?yàn)閡sleep是毫秒為單位,進(jìn)度條時(shí)間可以自己控制
   }                                      
   printf("\n");//最后的時(shí)候換個(gè)行更加美觀
   return 0;                              
 }                                        

實(shí)踐成功,達(dá)到了我預(yù)期的效果,perfect!

到此這篇關(guān)于C語(yǔ)言進(jìn)度條的實(shí)現(xiàn)原理詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解C語(yǔ)言棧的創(chuàng)建

    深入了解C語(yǔ)言棧的創(chuàng)建

    棧只允許在一端進(jìn)行插入或刪除操作的線性表。首先棧是一種線性表,但是限定這種線性表只能在某一端進(jìn)行插入和刪除操作,這篇文章主要介紹了C語(yǔ)言對(duì)棧的實(shí)現(xiàn)基本操作
    2021-07-07
  • Win10+VS2017新CUDA項(xiàng)目配置教程

    Win10+VS2017新CUDA項(xiàng)目配置教程

    這篇文章主要為大家詳細(xì)介紹了Win10+VS2017新CUDA項(xiàng)目配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C++ 中的Swap函數(shù)寫法匯總

    C++ 中的Swap函數(shù)寫法匯總

    這篇文章主要介紹了C++ 中的Swap函數(shù)寫法匯總,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問(wèn)題

    完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問(wèn)題

    使用QT提供的QChartView來(lái)繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報(bào)錯(cuò)呢,下面小編給大家?guī)?lái)了QT QGraphicsView 提升到QChartView報(bào)錯(cuò)解決方案,感興趣的朋友一起看看吧
    2023-05-05
  • 探討C++中數(shù)組名與指針的用法比較分析

    探討C++中數(shù)組名與指針的用法比較分析

    本篇文章是對(duì)C++中數(shù)組名與指針用法的比較進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 適合初學(xué)者的C語(yǔ)言轉(zhuǎn)義字符講解

    適合初學(xué)者的C語(yǔ)言轉(zhuǎn)義字符講解

    轉(zhuǎn)義字符是很多程序語(yǔ)言、數(shù)據(jù)格式和通信協(xié)議的形式文法的一部分。對(duì)于一個(gè)給定的字母表,一個(gè)轉(zhuǎn)義字符的目的是開(kāi)始一個(gè)字符序列,使得轉(zhuǎn)義字符開(kāi)頭的該字符序列具有不同于該字符序列單獨(dú)出現(xiàn)(沒(méi)有轉(zhuǎn)義字符開(kāi)頭)時(shí)的語(yǔ)義。因此轉(zhuǎn)義字符開(kāi)頭的字符序列被叫做轉(zhuǎn)義序列
    2022-04-04
  • 利用C語(yǔ)言編寫“剪刀石頭布”小游戲

    利用C語(yǔ)言編寫“剪刀石頭布”小游戲

    這篇文章主要給大家介紹了關(guān)于如何利用C語(yǔ)言編寫“剪刀石頭布”小游戲的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于errno返回值的對(duì)應(yīng)錯(cuò)誤碼的詳細(xì)介紹

    基于errno返回值的對(duì)應(yīng)錯(cuò)誤碼的詳細(xì)介紹

    本篇文章是對(duì)errno返回值的對(duì)應(yīng)錯(cuò)誤碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之條件判斷

    C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之條件判斷

    本文給大家簡(jiǎn)單介紹了下C語(yǔ)言中的條件判斷語(yǔ)句的語(yǔ)法和用法示例,非常簡(jiǎn)潔實(shí)用,有需要的小伙伴可以參考下
    2017-10-10
  • C++利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載

    C++利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載

    這篇文章主要為大家詳細(xì)介紹了C++如何利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-01-01

最新評(píng)論

高雄市| 辉县市| 务川| 班玛县| 高州市| 遵化市| 克拉玛依市| 江油市| 新郑市| 综艺| 吴川市| 宝丰县| 阳谷县| 巴里| 宝应县| 台江县| 岱山县| 彭山县| 翼城县| 余干县| 略阳县| 怀来县| 扬中市| 米泉市| 宣武区| 新巴尔虎右旗| 新绛县| 沂水县| 分宜县| 沁阳市| 静乐县| 阳泉市| 桐乡市| 元氏县| 三台县| 舞钢市| 遵义县| 铜鼓县| 安平县| 岚皋县| 时尚|