aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0
在传输文件的时候,为了显示传输的进度,需要在一行不停的变换数字显示,找了些资料,发现原来可以很简单的实现,先记录下来

#include <unistd.h>
#include <iostream>
using namespace std;
 
int main(int argc, char * argv[])
{
        for (int i = 0; i < 10; ++i)
        {
                cout << "\rnow:" << i;
                cout.flush();
                sleep(1);
        }
        return 0;
}

说明:
1. 主要是\r的使用,在输出时,遇到\r后,光标被重置于行的开始处,覆盖掉原来的输出
2. 刷新缓冲区
posted on 2008-12-05 11:28 阅读(3513) 评论(6)  编辑 收藏 引用 所属分类: c/c++基础知识

FeedBack:
# re: linux在终端模式显示进度
2008-12-05 14:27 | likev@qq.com
如果进度数字越来越小呢? 从100到0输出呢,仅仅覆盖就会出问题了。 100,990,980,……,100

最好的办法是先从一行空格覆盖(cout<<"\r "),再\r输出。  回复  更多评论
  
# re: linux在终端模式显示进度
2008-12-05 15:05 |
@likev@qq.com
提得很针对性,我考虑欠缺了。  回复  更多评论
  
# re: linux在终端模式显示进度
2008-12-08 09:42 | zuhd
你不会只为了实现这个功能,让主线程sleep(1)吧。。。。。  回复  更多评论
  
# re: linux在终端模式显示进度
2008-12-08 13:51 | heweitykc
如果是多行怎么处理啊?  回复  更多评论
  
# re: linux在终端模式显示进度
2008-12-09 10:10 |
@zuhd
这个只是用来模拟进度的了,sleep是为了1秒显示一次  回复  更多评论
  
# re: linux在终端模式显示进度
2008-12-09 10:19 |
@heweitykc
多行的好像不能这么处理(我还没找到方法),除非用定位的方式,蔽日dos下的gotoxy,linux下可以这样处理
//清屏
static void clrscr()
{
printf("\033[2J");
}
//光标定位
static void gotoxy(int x, int y)
{
char essq[100]={0};
sprintf(essq, "\033[%d;%df", y, x);
printf("%s", essq);
}  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 493806
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜