Linux第一个小程序——进度条

目录

回车和换行

缓冲区

设计倒计时

Version1:进度条


回车和换行

回车\r:'r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖。

换行\n:'n' 换行,换到当前位置的下一行,而不会回到行首。(满足回车/换行两种功能)

Linux第一个小程序——进度条_第1张图片 

缓冲区

  1 #include
  2 #include
  3 int main()
  4 {
  5   printf("hello linux,hello word");                                                                          
  6   sleep(3);
  7   return 0;
  8 }
  1 #include
  2 #include
  3 int main()
  4 {
  5   printf("hello linux,hello word\n");                                                                          
  6   sleep(3);
  7   return 0;
  8 }

屏幕录制 2024-01-27 194734

 

执行上面两段代码(它们的区别是是否包含\n)

我们清晰的发现:

  • 带有\n的就直接出现在了显示器(屏幕)上
  • 没有带\n的程序结束之后才回显示在终端上

结论:包括\n在内的之前全部字符串全部刷新到我们的显示器上

Linux第一个小程序——进度条_第2张图片 

刷新的方式:

  •  \n
  • 缓冲区满了
  • 程序结束                     
  • 强制刷新fflush   fflush(stdout)
  • fflush - C++ Reference (cplusplus.com)
  • stdout - C++ Reference (cplusplus.com)
//输出流--显示器/终端
extern FILE * stdout;
extern FILE * stderr;
//输入流--键盘
extern FILE * stdin;
//开机默认打开三个流(输入/输出流)
  //修改之后
  1 #include
  2 #include
  3 int main()
  4 {
  5   printf("hello linux,hello word");
  6   fflush(stdout);                                                                                            
  7   sleep(3);                                                                                
  8   return 0;                                                                                
  9 } 

设计倒计时

#include 
#include 

int main()
{
    int cnt = 10;

    while(cnt>=0)
    {
        printf("倒计时: %2d\r", cnt);
        fflush(stdout);
        cnt--;
        sleep(1);
    }
    printf("\n");

    //printf("hello bit,hello world...");
    //fflush(stdout);
    //sleep(3);

    return 0;
}

Version1:进度条

#define Length 101
#define Style '='

const char *lable = "|/-\\";

//version 1
void ProcBar()
{
    char bar[Length];
    memset(bar, '\0', sizeof(bar));
    int len = strlen(lable);
    int cnt = 0;
    while(cnt <= 100)
    {
        printf("[%-100s][%3d%%][%c]\r", bar, cnt, lable[cnt%len]);
        fflush(stdout);
        bar[cnt++] = Style;
        usleep(20000);
    }
    printf("\n");
}
  • Version2:应用场景+进度条
  • Version3:升级彩色进度条

感谢大家的阅读,若有错误和不足,欢迎指正

你可能感兴趣的:(Linxu系统编程,linux,运维,服务器)