Linux下使用printf打印个性化进度条

4 篇文章 0 订阅

我们在Linux使用yum安装插件或手动安装包时,发现安装过程各种颜色和进度条很炫酷,它们是怎么实现的呢?快来一起学习打印一个炫酷的进度条吧!

一、知识储备

1.  字体属性

代码

功能

\033[0m 关闭所有属性
\033[1m设置高亮度 
\033[4m下划线 
\033[5m 闪烁 
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m设置前景色 (字体色)
\033[40m -- \033[47m设置背景色

 

 

 

 

 

 

 

 

 

2. 字体及背景颜色

颜色

字体色

背景色

黑色3040
红色3141
绿色3242
黄色3343
蓝色3444
紫色3545
青色3646
白色3747

 

 

 

 

 

 

 

 

 

 3. 光标控制

代码

功能

\033[nA光标上移n行 
\033[nB光标下移n行
\033[nC光标右移n行 
\033[nD光标左移n行
\033[y;xH设置光标位置 
\033[2J清空控制台
\033[K清除从光标到行尾的内容 
\033[s保存光标位置 
\033[u恢复光标位置
\033[?25l 隐藏光标 
\033[?25h 显示光标
\r 光标移动至行首

 

 

 

 

 

 

 

 

 

 

 

二、代码演示

1. 代码

package main

import
(
 "fmt"
 "time"
 "sync"
)

var wg sync.WaitGroup
func main(){

        fmt.Printf("===============================begin test ==============================\n")
        time.Sleep(time.Second)

        wg.Add(1)
        go func(){
                defer wg.Done()

                fmt.Println()
                total := 1000000
                for i:=1;i<=total;i++{

                        /*do some task*/

                        cursorUp := 1
                        cursorDown := 1

                        fmt.Printf("\r\033[%dA\033[K\033[1;44;37mTask1:[%d/%d]\033[0m" +
                                "\033[%dB\r\033[K\033[1;43;31mTask2:[%d/%d]\033[0m",
                                cursorUp, i, total, cursorDown, i*2, total*2)


                        if i == total{
                                fmt.Printf("\r\033[%dA\033[K\033[4;42;37mTask1:[success]\033[0m" +
                                        "\033[%dB\r\033[K\033[4;42;37mTask2:[success]\033[0m", cursorUp, cursorDown)
                        }
                }

                fmt.Println()
        }()

        /*do something*/
        wg.Wait()
}

2. 结果展示

     (1)运行中

         

    (2)运行结束

     

 3. for循环printf内容解析

(1)  首先 \r 使光标回到行首,\033[%dA 使光标上移一行,此时光标位于上一行行首。

(2) 使用\033[K清除光标到行尾的内容,为了防止以后的进度条信息长度不一导致结尾有上一行的显示遗留。

(3) \033[1;44;37m 设置高亮(默认为高亮,可不设置),蓝色背景,白色字体。

(4) Task1:[%d/%d] 输出进度1。

(5) \033[0m 还原设置的属性。

(6) \033[%dB\r 使光标下移一行并回到行首。

(7) 033[K 清空当前行,作用与第2步相同。

(8) \033[1;43;31m  设置高亮,黄色背景,红色字体。

(9) Task2:[%d/%d] 输出进度2。

(10) \033[0m 还原设置的属性。

(11) 循环以上操作。

(12) 达到最后一次循环,\033[4;42;37m 设置下划线,绿色背景,白色字体,打印success。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一些常见的神兽的 ASCII 艺术: 1. 麒麟 ``` ,#####, #_ _# |a` `a| | u | \ = / |\___/| ___/\_`.___.'_/\___ /.---.\|` `||/.---.\ ' `--. `\\ //` .--` ` `\\ \\ // //` `\\//\\//` `\/\//\/` `"`"`` ``` 你可以将上面的 ASCII 艺术复制到代码使用 printf 函数打印出来。 例如: ``` #include <stdio.h> int main() { printf(" ,#####,\n"); printf(" #_ _#\n"); printf(" |a` `a|\n"); printf(" | u |\n"); printf(" \\ = /\n"); printf(" |\\___/|\n"); printf(" ___/\\_`.___.'_/\\___\n"); printf(" /.---.\\|` `||/.---.\\\n"); printf("' `--. `\\\\ //` .--` `\n"); printf(" `\\\\ \\\\ // //`\n"); printf(" `\\\\//\\\\//`\n"); printf(" `\\/\\//\\/`\n"); printf(" `\"`\"`\"\n"); return 0; } ``` 2. 凤凰 ``` ____......----""""----......____ ."" . . "". .'' ...'''''''--... ``. .' ..'._._._._._._._.''. `. .' .'.' `.`. `. . .'.' `. . . .' `. . . .' `. . . .' `. . . .' `. . . .' `. . . .' `. . . . . . . . . . . . . . . . . `. . . `. . . `. . . `.`. . . `.`. . `. `.`. . `. `.`. . `. `.`. . `. `.`. . `. """"----....____,..::''''' | __ ,' / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | / | /_______________________________________________| ``` 同样,你可以将上面的 ASCII 艺术复制到代码使用 printf 函数打印出来。 ### 回答2: 使用printf函数可以打印出一个神兽的图案。首先,我们需要使用转义字符和特定的符号来组成图案。例如,可以使用星号(*)来表示神兽的眼睛和鼻子,用斜杠(/)和竖线(|)来表示神兽的身体和四肢。下面是一个示例: ``` #include <stdio.h> int main() { printf(" /\\_/\\\n"); printf(" ( o.o )\n"); printf(" (> <)\n"); printf(" -~~-"); return 0; } ``` 上面的代码会打印出一个小猫的图案,这可以被视为一种神兽的形象。其,第一行和最后一行使用了斜杠(/)表示神兽的额头和下巴,而第二行和第三行使用了星号(*)表示神兽的眼睛和鼻子,最后一行使用了连字符(-)和波浪线(~)表示神兽的身体。 希望以上的回答能帮到您! ### 回答3: 在使用printf打印神兽时,我们需要事先准备好神兽的图案。通常,我们可以使用ASCII字符来组成神兽的形状。以下是一个示例的代码段: ```c #include <stdio.h> int main() { printf(" />  フ\n"); printf("      |  _  _| \n"); printf("  /`ミ_xノ |\n"); printf("  /      |\n"); printf(" │  >  ≫|\n"); printf(" /    /   |\n"); printf(" | ト   |  |\n"); printf(" ┴─┴   ヽ  \n"); printf(" ノ |     \n"); printf(" |  _     |\n"); printf(" │  U   \n"); printf(" \     \n"); return 0; } ``` 在上述代码,我们使用ASCII字符来呈现了一只神兽的形象。我们使用printf函数逐行打印出神兽的图案,从而实现了打印神兽的效果。运行该程序,即可在终端或控制台上看到如上图案的神兽。 当然,如果你有其他神兽的图案,也可以根据相应的ASCII字符来打印。需要注意的是,每个字符之间需要使用`\n`进行换行,以保证打印结果的准确性。 总而言之,使用printf函数打印神兽,只需准备好相应的ASCII字符,并使用printf函数逐行打印它们,即可在终端或控制台上看到神兽的形象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值