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

来源:互联网 发布:25 知乎 编辑:程序博客网 时间:2024/05/22 14:29

源自我的一个问题:http://topic.csdn.net/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;

}

 

 

 

原创粉丝点击