Вывести символ возврата в UNIX

Я пытаюсь оживить загрузочную панель.

Он прекрасно работает в Windows, выполнив следующие действия:

    for(int j=0; j<currentSize; ++j)
cout<<static_cast<char>(219);
for(int k=maxSize; k>=currentSize; k--)
cout<<static_cast<char>(177);
...
for(int l = 0; l<maxBarSize; l++){
cout<<'\b';

Однако когда я пытаюсь в UNIX, команда backspace не работает. Он ничего не удаляет и не печатает. Я также пытался использовать '^H' инеад из '\b',

Разве невозможно удалить строку консоли вывода в UNIX?

2

Решение

Вы пробовали печатать [backspace], [space], [backspace]? Это напечатает пробел поверх символа, который вы пытаетесь стереть.

Если это не сработает, я подозреваю, что проблема заключается не в вашем коде, а в эмуляторе вашего терминала (xterm и т. Д.). Некоторые поддерживают такие вещи, как backspace, некоторые — нет (а некоторые поддерживают его настройку).

Асо, Элазар сделал комментарий о звонке cout.flush(), Это потому, что большую часть времени, stdout является линия буферизации. Это означает, что библиотеки будут буферизовать все данные, записанные в stdout пока не встретится новая строка, после чего буфер сбрасывается в фактический дескриптор файла. По телефону flush() Вы заставляете выходной буфер быть немедленно записанным в файл (TTY).

3

Другие решения

печать \b или же ^h делает именно это: он будет «печатать» эти символы. Он не выполняет операцию «обратного удаления», что делает программа TTY в ответ на те, которые вводятся с клавиатуры. Вы не видите их в выводе, потому что они не являются видимыми символами. Они меняют положение курсора. Если вы напечатали:

Hello, World!\b\b\b\b\b\bEarth!

Вы бы увидели все эти символы, если бы отправили вывод в файл. Но на терминале это может выглядеть так:

Hello, Earth!

Мир!» персонажи все еще там, просто перезаписаны «Земля!»

3

По вопросам рекламы [email protected]