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