如何在C ++中从命令行删除打印的字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C ++中从命令行删除打印的字符相关的知识,希望对你有一定的参考价值。

我前几天在Windows 2000上下载了一个编译器(我认为它是MinGW,但我不确定)(我通常是Mac用户,但它不是我的机器),下载器是MS-DOS命令行应用程序,它将显示下载的进度条。像这样......

|---                 | 15%
...
|------              | 30%
...
...
|--------------      | 70%

除了它会在同一行上不断更新。我假设程序通过删除以前打印的字符并重新打印不同的字符来完成此操作,但我似乎无法弄清楚如何执行此操作。

我曾试图用几种不同的方式打印一个'删除'字符,比如(char)8(甚至 ,我听说在一些语言中回溯到行的开头),但这些都没有用。

有谁知道怎么做这种东西?

编辑:此问题已成为特定于平台的问题。我想具体了解如何在Mac上完成此操作。

答案

我不确定你为什么遇到问题,但是 or 可以用来做这个,我用过

#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>

// This is the only non-portable part of this code.
// Simply pause for a specified number of milliseconds
// For Windows, we just call Sleep. For Linux, you'd
// probably call nanosleep instead (with a suitable
// multiplier, of course). Most other systems (presumably)
// have (at least vaguely) similar capabilities.
void pause(int ms) { 
    Sleep(ms);
}

static const int width = 40;    

void show_percent(int i) {
     int dashes = (width * i)/100;

     std::cout << '|' << std::left << std::setw(width) << std::string(dashes, '-') << '|' << std::setw(3) << i << "%";
}

int main() {

    for (int i=0; i<101; i++) {
        show_percent(i);
        std::cout << std::string(width+6, '');
        pause(100);
    }
}
另一答案

根据to Wikipedia

Win32控制台根本不支持ANSI转义序列。软件可以使用与文本输出交错的类似ioctl的Console API来操作控制台。某些软件在内部解释正在打印的文本中的ANSI转义序列,并将它们转换为这些调用[需要引证]。

看看这个:http://msdn.microsoft.com/en-us/library/ms682073.aspx

我相信SetConsoleCursorPosition是允许你替换文本的东西。

以上是关于如何在C ++中从命令行删除打印的字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在目标 c 中从 int 转换为字符串:示例代码

在程序中如何去掉字符串中的空字符

Linux脚本基础

如何在 Windows 中从 Google 代码下载/签出项目?

如何在android中从命令行运行ffmpeg

如何在目标 c 中从 Firebase Auth 中删除“使用电子邮件登录”