国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Linux]手把手教你制作進度條小程序

這篇具有很好參考價值的文章主要介紹了[Linux]手把手教你制作進度條小程序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

[Linux]制作進度條小程序

C語言中的\n和\r字符

C語言中字符分為兩種:

  • 可顯字符
  • 控制字符

其中可顯字符就是字符a這類的字符,控制字符就是\n這種控制字符。

對于我們制作進度條,我們只需要關(guān)注兩個控制字符:

  • \r – 進行回車操作
  • \n – 進行換行加回車操作

說明: \n本身是換行字符,但是C語言本身將其解析成了換行加回車。

為了更好地體會字符\r和\n的作用,我們需要做一些測試,為了方便進行編譯,創(chuàng)建makefile文件,文件內(nèi)容如下:

mytest:test.c
	gcc -o mytest test.c
.PHONY:clean
clean:
	rm -f mytest

首先執(zhí)行如下代碼:

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("hello world");
    sleep(3);
    fflush(stdout);
	return 0;
}

說明:

  • fflush(stdout)是將標準輸出緩沖區(qū)刷新,便于觀察現(xiàn)象。
  • sleep為Linux系統(tǒng)的休眠函數(shù)。

執(zhí)行結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

在打印完hello world后,程序休眠,"光標"在同一行的下一個位置

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

休眠結(jié)束后,將會接著從光標位置開始打印,因此打印的[qxm@aliyun-centos review]$命令行提示符,緊跟在hello world其后。

再執(zhí)行如下代碼:

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("hello world\n"); 
    sleep(3);
    return 0;
}

執(zhí)行結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

由于\n被C語言解析成換行加回車,在打印完hello world后程序休眠,"光標"會到下一行的開始的位置。

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

休眠結(jié)束后,將會接著從光標位置開始打印,因此[qxm@aliyun-centos review]$命令行提示符是在下一行的行首打印。

最后執(zhí)行如下代碼:

#include <stdio.h>
#include <unistd.h>
int main()
{
    printf("hello world\n"); 
    sleep(3);
    return 0;
}

說明:

  • fflush(stdout)是將標準輸出緩沖區(qū)刷新,便于觀察現(xiàn)象。
  • sleep為Linux系統(tǒng)的休眠函數(shù)。

執(zhí)行結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

由于\r為回車,在打印完hello world后程序休眠,"光標"會回到行首。

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

休眠結(jié)束后,將會接著從光標位置開始打印,因此[qxm@aliyun-centos review]$命令行提示符將原有的hello world覆蓋了。

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

緩沖區(qū)的刷新策略

Linux系統(tǒng)下,C語言會將要打印的字符先存放在緩沖區(qū)中,只有將緩沖區(qū)內(nèi)的字符刷新到屏幕上,才能在屏幕上看到,緩沖區(qū)刷新的情況如下:

  • 遇到\n會將\n前的所有字符刷新到屏幕上。
  • 程序結(jié)束時自動刷新緩沖區(qū)。

對于緩沖區(qū)測試,我們執(zhí)行如下代碼:

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("hello world\r");
  	sleep(3);
	return 0;
}

執(zhí)行結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

因為緩沖區(qū)沒有刷新,因此程序休眠時,沒有任何打印。

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

程序執(zhí)行結(jié)束后,緩沖區(qū)被自動刷新,hello world被打印出來,但是由于\r回車將"光標"退回到行首,因此命令提示符的打印將前面的打印覆蓋了。

再執(zhí)行如下代碼:

#include <stdio.h>
#include <unistd.h>
int main()
{
	printf("hello world\n");
  	sleep(3);
	return 0;
}

執(zhí)行結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

由于遇到了\n緩沖區(qū)內(nèi)的數(shù)據(jù)在休眠前刷新了。

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

程序休眠結(jié)束后,命令行提示符從光標所在位置開始打印。

進行進度條代碼編寫

創(chuàng)建以下文件構(gòu)成代碼結(jié)構(gòu):

  • myproc.h – 保存進度條代碼的聲明
  • myproc.c – 保存進度條代碼的實現(xiàn)
  • main.c – 調(diào)用進度條代碼

myproc.h文件中的核心結(jié)構(gòu)如下:

#pragma once 
#include <stdio.h>
extern void process();

myproc.c文件中的核心結(jié)構(gòu)如下:

#include "myproc.h"
void process()
{
  //...
}

main.c文件中的核心結(jié)構(gòu)如下:

#include "myproc.h" 
int main()
{
  process();
  return 0;
}

同時創(chuàng)建makefile文件,makefile文件內(nèi)部寫入如下內(nèi)容:

myproc:myproc.c main.c
	gcc -o myproc myproc.c main.c
.PHONY:clean
clean:
	rm -f myproc

建立好代碼結(jié)構(gòu)后,編寫如下代碼充當圖形化進度條:

#include "myproc.h"
#include <string.h>
#include <unistd.h>

#define STYLE '='
#define ARROW '>'
#define SIZE 101

void process()
{
  char buf[SIZE];
  memset(buf, 0 , SIZE);
  int i = 0;
  while(i <= 100)
  {
    printf("[%-100s]\r", buf);
    fflush(stdout);
    buf[i++] = STYLE;
    if(i != 100 )buf[i] = ARROW;
    usleep(100000);
  }
  printf("\n");
}

首先創(chuàng)建一個字符串用于保存要打印的圖形化進度條buf,對其進行初始化,然后在打印時進行左對齊打印buf并且按100個字符長度打印,

每次打印完回車覆蓋上一次從打印,并且刷新緩沖區(qū)使得打印顯示到屏幕上,使用休眠函數(shù)來充當進度的加載。

打印的效果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

除了圖形化進度條還要設(shè)置數(shù)字化進度顯示,因此需要對打印進行修改,如下:

printf("[%-100s][%d%%]\r", buf, i);

增加打印進度百分比作為數(shù)據(jù)化進度顯示,%%將會轉(zhuǎn)義成一個%打印在屏幕上。

打印的效果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言

最后增添一個旋轉(zhuǎn)光標表示進度條正在不斷執(zhí)行,因此需要對打印再進行修改,得到最終的代碼如下:

#include "myproc.h"
#include <string.h>
#include <unistd.h>

#define STYLE '='
#define ARROW '>'
#define SIZE 101

void process()
{
  const char* cursor = "|/-\\";
  char buf[SIZE];
  memset(buf, 0 , SIZE);
  int i = 0;
  while(i <= 100)
  {
    printf("[%-100s][%d%%][%c]\r", buf, i, cursor[i%4]);
    fflush(stdout);
    buf[i++] = STYLE;
    if(i != 100 )buf[i] = ARROW;
    usleep(100000);
  }
  printf("\n");
}

添加了cursor字符串保存旋轉(zhuǎn)光標的樣式,其中\(zhòng)\會轉(zhuǎn)義成一個\,因為旋轉(zhuǎn)光標中是將4個字符循環(huán)打印因此將樣式字符串模4輸出。

最終進度條的演示結(jié)果如下:

[Linux]手把手教你制作進度條小程序,Linux,linux,小程序,apache,服務(wù)器,c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-631370.html

到了這里,關(guān)于[Linux]手把手教你制作進度條小程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • AI繪畫怎么弄?手把手教你制作

    AI繪畫怎么弄?手把手教你制作

    最近關(guān)于AI繪畫的話題是非常火爆的,小伙伴們了解AI繪畫嗎?這是一種由我們輸入關(guān)于畫面的描述,然后由AI根據(jù)這些描述自動生成畫面的技術(shù)?,F(xiàn)在有很多軟件都可以實現(xiàn)AI繪畫的操作,那你們知道AI繪畫特效軟件哪個好嗎?想要制作AI繪畫的小伙伴,下面就為你們帶

    2024年02月11日
    瀏覽(97)
  • 【手把手教你制作一個簡易版的shell】

    【手把手教你制作一個簡易版的shell】

    為了簡便,命令行中的提示符我們可以直接用printf打印,而具體執(zhí)行命令可以交給子進程去做,現(xiàn)在的關(guān)鍵是如何將獲得的命令行中的命令切割。我們在學習C語言時提到了strtok函數(shù),正好這個函數(shù)可以用來作為切割。 基本框架: 不知道大家注意到了沒有,我們從鍵盤中讀取

    2023年04月16日
    瀏覽(39)
  • 若依ruoyi——手把手教你制作自己的管理系統(tǒng)【二、修改樣式】

    若依ruoyi——手把手教你制作自己的管理系統(tǒng)【二、修改樣式】

    阿里圖標一( ̄︶ ̄*)) 圖片白嫖一((* ̄3 ̄)╭ ********* 專欄略長 ==== 爆肝萬字 ==== 細節(jié)狂魔 ==== 請準備好一鍵三連 ********* 運行成功后: idea后臺正常先掛著 我習慣用VScode操作 當然如果有兩臺機子 一個掛后臺一個改前端就更好了 只需修改 vue.config.js 配置文件即可 eg:按 Win+R 打

    2024年02月03日
    瀏覽(36)
  • 若依ruoyi——手把手教你制作自己的管理系統(tǒng)【三、代碼生成】

    若依ruoyi——手把手教你制作自己的管理系統(tǒng)【三、代碼生成】

    增刪改查導(dǎo)一( ̄︶ ̄*)) 按鈕換個色一((* ̄3 ̄)╭ ********* 專欄略長 ==== 爆肝萬字 ==== 細節(jié)狂魔 ==== 請準備好一鍵三連 ********* 修改后的頁面: 干干凈凈賊舒服一Ψ( ̄? ̄)Ψ——Ψ( ̄? ̄)Ψ一 接下來我們要達到的效果如下(自定義菜單 里面有列表數(shù)據(jù)回顯+增刪改查) 一、修改

    2023年04月25日
    瀏覽(29)
  • 手把手教你Linux的網(wǎng)絡(luò)配置

    手把手教你Linux的網(wǎng)絡(luò)配置

    目錄 網(wǎng)絡(luò)連接測試 測試Linux虛擬機是否與主機連接 測試主機是否與虛擬機連接 網(wǎng)絡(luò)連接模式 橋接模式 NAT模式 僅主機模式 修改靜態(tài)IP 修改 IP 地址后可能會遇到的問題 配置主機名 測試Linux虛擬機是否與主機連接 首先可以在windows界面,windows + R鍵輸出cmd打開命令行,輸入 ?

    2024年02月03日
    瀏覽(53)
  • 用HTML語言制作一個非常浪漫的生日祝福網(wǎng),手把手教你制作炫酷生日祝福網(wǎng)頁

    用HTML語言制作一個非常浪漫的生日祝福網(wǎng),手把手教你制作炫酷生日祝福網(wǎng)頁

    明天就是女朋友的生日了, 是時候展現(xiàn)專屬于程序員的浪漫了!你打算怎么給心愛的人表達愛意?鮮花禮物?代碼表白?還是創(chuàng)意DIY?或者…無論那種形式,快來秀我們一臉吧! HTML生日祝福網(wǎng)頁制作(粉色主題)程序員專屬生日表白網(wǎng)站 ?? 注:以下代碼為部分演示,如需完整

    2024年02月16日
    瀏覽(20)
  • 手把手教你小程序反編譯

    手把手教你小程序反編譯

    1.反編譯工具unveilr :百度網(wǎng)盤鏈接:https://pan.baidu.com/s/10Wle8CwvBq54GPWcbEnxLQ 提取碼:bivh? ?解壓即可用。 2.微信開發(fā)者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html 1.獲取小程序存儲文件夾 (1)打開PC端微信設(shè)置,在文件管理中找到存儲路徑,選擇打開文件夾。

    2024年04月12日
    瀏覽(37)
  • 手把手教你反編譯小程序

    手把手教你反編譯小程序

    操作系統(tǒng): win10 10.0.19042 node: v14.17.0 微信開發(fā)者工具: Stable 1.05.2110290 在電腦端安裝模擬器工具,這里以夜神模擬器為例, 在模擬器中安裝微信:用于微信打開小程序時加載小程序包。 在模擬器中文件管理器:用于查看小程序包,這里使用模擬器自帶的Amaze。 文件共享路徑:可

    2024年02月08日
    瀏覽(23)
  • 手把手教你繪制小程序海報

    手把手教你繪制小程序海報

    海報分享功能在許多應(yīng)用中應(yīng)該是很常見的,因為它作為一種常用的應(yīng)用推廣和拉新的方式。 接下來看個實際的案例,如下: 把任務(wù)拆解下: 如何繪制海報 如何把繪制后的海報保存到相冊 用 canvas 來繪制海報。 這里需要了解基本的 canvas api ,不熟悉可以先去了解下相關(guān)

    2024年02月04日
    瀏覽(30)
  • 手把手教你制作登錄、注冊界面 SpringBoot+Vue.js(cookie的靈活運用,驗證碼功能)

    手把手教你制作登錄、注冊界面 SpringBoot+Vue.js(cookie的靈活運用,驗證碼功能)

    實現(xiàn)思路:用戶在界面輸入用戶名和密碼傳入變量。用post方法傳輸?shù)胶蠖?,后端接收整個實體對象。將用戶名提取出。在dao層方法中通過select注解查詢,返回數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)對象。如果返回為空則return false。不為空則通過比對數(shù)據(jù)庫返回的密碼和用戶輸入的密碼,如果二者

    2024年02月03日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包