使用退格控制字符擦除

hyt*_*ucx 19 c++ escaping

我试图使用退格控制字符'\b'擦除行尾的尾随逗号.虽然它适用于没有其他输出的情况,但stdout如果之后有另一个输出'\b',它就变得无用了.这是一个例子:

#include <iostream>

using namespace std;

int main()
{
    int a[] =  { 1, 3, 4, 5, 6, 32, 321, 9};
    for ( int i = 0; i < 8; i++) {
        cout << a[i] << "," ;
    }
    cout << "\b" ;
    //cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码块中,如果行被注释为看到的,我们得到所需的结果,在数字9之后没有逗号.但是,如果该行未注释,则逗号重新出现.

在我的程序中,我不希望逗号存在,但想在9之后得到一个结束语.我该怎么做?

nne*_*neo 29

擦除控制台上最后一个字符的常用方法是使用序列"\b \b".这会将光标移回一个空格,然后写入一个空格来擦除字符,然后再次退格,以便新写入从旧位置开始.请注意,\b它本身只移动光标.

当然,您可以始终避免首先输出逗号:

if(i > 0) cout << ",";
cout << a[i];
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法,除非我使用的是C++ 11循环:for(int a:A){...} (2认同)

ric*_*ici 5

或者,如果您喜欢 C+11 hacks:

adjacent_difference(a.begin(), a.end(), ostream_iterator<int>(std::cout),
  [](int x, int)->int { return std::cout << ",", x; });
Run Code Online (Sandbox Code Playgroud)