Я пытаюсь оживить загрузочную панель.
Он прекрасно работает в 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?
Вы пробовали печатать [backspace]
, [space]
, [backspace]
? Это напечатает пробел поверх символа, который вы пытаетесь стереть.
Если это не сработает, я подозреваю, что проблема заключается не в вашем коде, а в эмуляторе вашего терминала (xterm и т. Д.). Некоторые поддерживают такие вещи, как backspace, некоторые — нет (а некоторые поддерживают его настройку).
Асо, Элазар сделал комментарий о звонке cout.flush()
, Это потому, что большую часть времени, stdout
является линия буферизации. Это означает, что библиотеки будут буферизовать все данные, записанные в stdout
пока не встретится новая строка, после чего буфер сбрасывается в фактический дескриптор файла. По телефону flush()
Вы заставляете выходной буфер быть немедленно записанным в файл (TTY).
печать \b
или же ^h
делает именно это: он будет «печатать» эти символы. Он не выполняет операцию «обратного удаления», что делает программа TTY в ответ на те, которые вводятся с клавиатуры. Вы не видите их в выводе, потому что они не являются видимыми символами. Они меняют положение курсора. Если вы напечатали:
Hello, World!\b\b\b\b\b\bEarth!
Вы бы увидели все эти символы, если бы отправили вывод в файл. Но на терминале это может выглядеть так:
Hello, Earth!
Мир!» персонажи все еще там, просто перезаписаны «Земля!»