\r终端输出的问题

近期偶一直在研究一个进度条的问题,具体要求是:

     程序在运行过程中要有进度显示,进度条需要根据时间不停的刷新,但是要求可以被其他的屏幕输出信息覆盖。

 

so so,怎么解决呢?

     研究了一下c/c++的输出控制,发现一个格式控制符'\r‘似乎可以满足需求。解决方法: 在输出进度条的时候不换行,下次输出信息时用 std::cout << '\r            ‘ 覆盖掉之前的进度条。

     小试了一下,问题貌似解决。微笑

 

但是,but,接下来出现了一个比较麻烦的问题。

      客户经常会通过管道等方式将屏幕输出定向到一个文件中去,而格式控制符'\r’在文件中是乱码,如何区分屏幕输出(终端)和文件输出呢?

      纠结了好久,老大的一句好拨开了云雾:使用std::cerr

           简单来讲,std::cout默认是终端输出,但是可以将它的rdbuf绑定到一个文件流上去,例如管道重定向。但是std::cerr只能绑定到终端输出。

      相应的调整了一下代码,利用std::cerr的特性来绑定终端输出的进度条代码,其余的默认输出。并且在每次输出其他信息的时候,调用 std::cerr << '\r            ‘ 来清洗之前的进度条信息。

 

 

 

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值