Отменить новую строку (\n), напечатанную в командной строке

printf("Error %d\n", 1);
printf("\nStatus: %d%%", 50);

печатает

Error 1

Status: 50%

В этой настройке есть ли возможность вставить Error 2\n между Error 1\n и \nStatus: 50%. Я понимаю, что \r и \b могут использоваться для изменения печатного текста в одной строке (например, если есть один \n между Error 1 и Status: 50%), но я могу изменить текст в предыдущем линия?

Спасибо!

Ответ 1

Извините, вы не можете.

Но вы можете выпустить системные вызовы, чтобы очистить весь экран, например system("clear") (зависит от ОС).

Или используйте ncurses так же, как упомянул Кос в комментарии.

Ответ 2

Что сказал @Ryan.

Объяснение: stdout - это абстрактный поток, который не должен быть терминалом. Это может быть файл, труба, сокет, принтер, текстовое устройство или другое. Во многих случаях нет смысла в том, что вы просили сделать. Следовательно, вам нужна библиотека, которая специально работает с терминалом.

Ответ 3

Вы можете использовать ANSI Escapesequences, чтобы переместить "курсор" в одну строку вверх:

void cursorOnLineUp(void) { printf("\033[1A"); }

Или установите его в определенную позицию:

void setCursor(int column, int row) { printf("\033[%d;%dH", row, column) }

Не пробовал это для С++, но успешно использовал его для простой игры в ANSI-C!