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

C語言進度條的實現(xiàn)原理詳解

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

\r和\n

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

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

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

行緩沖區(qū)

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

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

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

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

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

有了一個認知后

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

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

進度條

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

總結(jié)出進度條的一個制作方法:

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

想法很美好,理論可以成功,開始實踐……

 # include <stdio.h>
 # include <string.h> //別忘記包含memset函數(shù)的頭文件
 int main(void)
 {
   char buffer[102]; //開辟一個能容納102個字符的數(shù)組
   memset(buffer, 0, sizeof(buffer));//將字符數(shù)組的每一個字節(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); //因為usleep是毫秒為單位,進度條時間可以自己控制
   }                                      
   printf("\n");//最后的時候換個行更加美觀
   return 0;                              
 }                                        

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

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

相關(guān)文章

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

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

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

    Win10+VS2017新CUDA項目配置教程

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

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

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

    完美解決QT?QGraphicsView提升到QChartView報錯的問題

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

鄂尔多斯市| 弋阳县| 平武县| 营口市| 崇义县| 郎溪县| 天水市| 睢宁县| 红桥区| 屏东县| 大关县| 墨玉县| 浮山县| 马鞍山市| 应城市| 犍为县| 龙山县| 新邵县| 鹰潭市| 拉萨市| 景德镇市| 开平市| 大石桥市| 繁峙县| 井研县| 山阳县| 密山市| 北碚区| 台安县| 光山县| 陇川县| 东莞市| 静海县| 华亭县| 镶黄旗| 兰考县| 靖西县| 惠水县| 和田县| 隆昌县| 神池县|