Стирание с помощью символа управления 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