【问题标题】:How to remove last character put to std::cout?如何删除放入 std::cout 的最后一个字符?
【发布时间】:2010-09-19 13:31:34
【问题描述】:

是否可以在不使用 WinAPI 的情况下在 Windows 上运行?

【问题讨论】:

    标签: c++ stdout cout


    【解决方案1】:

    您不能删除最后一个字符。

    但是你可以通过覆盖最后一个字符来获得类似的效果。 为此,您需要通过输出 '\b'(退格)字符来向后移动控制台光标,如下所示。

    #include<iostream>
    using namespace std;
    int main()
    {
        cout<<"Hi";
        cout<<'\b';  //Cursor moves 1 position backwards
        cout<<" ";   //Overwrites letter 'i' with space
    }
    

    所以输出将是

    H

    【讨论】:

    • 您必须小心 cout 在插入退格键之前不会自行决定 flush
    • 我似乎无法用这种方法擦除新行。
    • 使用退格字符实际上是多平台的,因为我在 Linux 上测试过它并且它可以工作。要执行进度条之类的“控制台动画”,首先通过在主函数 std::cout
    • 但是,如果您将输出重定向到文件,那么 ^H 和前面的字符仍然会出现在那里。
    【解决方案2】:

    您也可以使用cin.get() 删除最后一个字符

    【讨论】:

      【解决方案3】:

      这段代码正是这样做的:

      std::cout<<"\b \b";
      

      【讨论】:

      • 但如果你使用 stringstream 并将 stringstream::str() 与其他字符串进行比较,它将不匹配。这仅适用于终端打印
      • 编辑:哦,所以你向后移动,写一个空格,然后再次向后移动。
      【解决方案4】:

      没有。

      你不能不访问控制台的非标准 api。

      【讨论】:

      • 对不起,你可以,看我的回答
      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多