Клавиши Backspace и Tab перемещают позицию курсора. Ни один из них не является «печатным» персонажем.
Ваш код говорит:
- печать "foo"
- переместить курсор назад на один пробел
- переместить курсор вперед к следующей вкладке
- вывод "бар".
Чтобы получить ожидаемый результат, вам нужно printf("foo\b \tbar")
. Обратите внимание на дополнительный «пробел». Это говорит:
- вывод "foo"
- переместить курсор назад на один пробел
- выводит '' (это заменяет второе 'o').
- переместить курсор вперед к следующей вкладке
- вывод "бар".
В большинстве случаев нецелесообразно использовать вкладки и клавишу Backspace для форматирования вывода вашей программы. Научитесь использовать printf()
спецификаторы форматирования. Рендеринг вкладок может сильно различаться в зависимости от того, как просматривается вывод.
Этот небольшой скрипт показывает один из способов изменить отображение вкладок вашего терминала. Протестировано на Ubuntu + gnome-терминал:
#!/bin/bash
tabs -8
echo -e "\tnormal tabstop"
for x in `seq 2 10`; do
tabs $x
echo -e "\ttabstop=$x"
done
tabs -8
echo -e "\tnormal tabstop"
Также см. man setterm
и regtabs
.
И если вы перенаправляете свои выходные данные или просто записываете в файл, вкладки довольно часто будут отображаться как меньше, чем стандартные 8 символов, особенно в «программирующих» редакторах и IDE.
Итак, другими словами:
printf("%-8s%s", "foo", "bar"); /* this will ALWAYS output "foo bar" */
printf("foo\tbar"); /* who knows how this will be rendered */
ИМХО, вкладки вообще редко бывают подходящими для чего-либо. Исключением может быть генерация вывода для программы, для которой требуются входные файлы со значениями, разделенными табуляцией (аналогично значению, разделенному запятыми).
Backspace '\b'
- это отдельная история ... ее никогда не следует использовать для создания текстового файла, поскольку он просто заставит текстовый редактор выплеснуть мусор. Но у него есть много приложений для написания интерактивных программ командной строки, которые не могут быть выполнены только с помощью строк формата. Если вам это сильно нужно, посмотрите «ncurses», что дает вам намного лучший контроль над тем, куда выводится ваш вывод на экране терминала. И, как правило, с 2011 года, а не с 1995 года, GUI-интерфейс обычно проще для высокоинтерактивных программ. Но опять же, есть исключения. Как написать сервер или консоль telnet для нового языка сценариев.