Подтвердить что ты не робот

Стирание с использованием символа управления обратным пространством

Я пытаюсь использовать символ управления обратным пространством '\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. Как мне это сделать?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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