C/C++consloe 中动态显示进度

本文介绍了如何在C/C++中实现动态更新屏幕输出的方法,包括使用fflush强制刷新输出缓冲区,通过回车符和退格符实现数值的动态更新,并展示了进度条和加载动画的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源自我的一个问题:http://topic.youkuaiyun.com/u/20110409/23/57e20e2c-4700-4853-82f6-fe3d135d7305.html?seed=539710984&r=72676818#r_72676818

 

#include <stdio.h>

#include <stdlib.h>

int main()

{

 printf("Hello world!/n");

 for(int i=0;i<100;++i)

 {

     printf("%d  /n",i);

     fflush(stdout);

     sleep(1);

 }

 return 0;

}

 

如果没有fflush(stdout);那么每一次循环都不会立即输出i的值,只有等到总共等待了i秒以后才会输出所有的i。

使用fflush(stdout)会立即要求刷新输出缓冲。

值得注意的是,‘/n’也会要求立即刷新输出缓冲和c++中的endl作用一样。

 

要实现动态数字改变的效果,可以如下:

#include <stdio.h>

#include <stdlib.h>

int main()

{

  printf("Hello world!/n");

  for(int i=0;i<100;++i)

  {

      printf("/r%d ",i);              // /r是回车符,定位到一行的开始位置

      fflush(stdout);

      sleep(1);

  }

  return 0;

}

 

另一种方法:

int main()

{

  printf("You have downlod the file.......");

  for(int i=0;i<101;++i)

  {

      printf("%2.0f%%",(i/100.0)*100);

      fflush(stdout);

      sleep(1);

      printf("/b/b/b");

      fflush(stdout);

  }

  return 0;

}

在加上一点漂亮的动画:

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

  printf("You have downlod the file.......");

  char achar[4]={'-','//','/'};

  for(int i=0;i<101;++i)

  {

      printf("%c %2.0f%%",achar[i%3],(i/100.0)*100);

      fflush(stdout);

      usleep(500000);

      printf("/b/b/b/b/b");

      fflush(stdout);

  }

  return 0;

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

归纳为一个函数:

#include <stdio.h>

#include <stdlib.h>

 

void dynamicPrint(char str [],unsigned int usecond)

{

  printf("%s",str);

  char achar[4]={'-','//','/'};

  for(int i=0;i<101;++i)

  {

      printf("%c %2.0f%%",achar[i%3],(i/100.0)*100);

      fflush(stdout);

      usleep(usecond);

      printf("/b/b/b/b/b");

      fflush(stdout);

  }

}

 

int main()

{

  unsigned int us=500000;

  char str[]="Good luck,your file has downloaded.....";

  dynamicPrint(str,us);

  return 0;

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用C++编写的函数

#include <iostream>

#include <string>

#include <cstdio>   //fflush()

#include <unistd.h>  //usleep()

#include <iomanip>   //setw()

void dynamicPrint(std::string &str,unsigned int usecond)

{

   std::cout<<str;

   char achar[4]={'-','//','/'};

   for(int i=0;i<101;++i)

   {

       std::cout<<achar[i%3]<<" "<<std::setw(2)<<(i/100.0)*100<<"%";

       std::cout.flush();

       usleep(usecond);

       std::cout<<"/b/b/b/b/b";

       std::cout.flush();

   }

}

 

int main()

{

   std::string str="hello....";

   unsigned int us=500000;

   dynamicPrint(str,us);

   return 0;

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值