Стирание с помощью символа управления backspace

Я пытаюсь использовать символ управления backspace '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;
}

в приведенном выше блоке кода, если строка прокомментирована, как видно, мы получаем желаемый результат без запятой после цифры 9. Однако, если строка не раскомментирована, запятая снова появляется.

в моей программе я не хочу, чтобы запятая была там, но хочу конечную строку после 9. Как мне это сделать ?

3 ответов


обычным способом стирания последнего символа на консоли является использование последовательности "\b \b". Это перемещает курсор на один пробел, затем записывает пробел, чтобы стереть символ, и снова отступает, чтобы новые записи начинались со старой позиции. Обратите внимание, что \b сам по себе двигается только курсор.

конечно, вы всегда можете избежать вывода запятой в первую очередь:

if(i > 0) cout << ",";
cout << a[i];

или, если вы любите хаки C+11:

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

да \Б будет двигаться только проклятие, поэтому когда вы заканчиваете линию, он просто перемещает ее в конец очереди. таким образом, чтобы фактически стереть последнюю часть, есть пробел после \b, чтобы фактически стереть последнюю запятую. пример: cout