Intereting Posts
Есть ли способ получить строковое представление значения HRESULT с помощью win API? восстановить инструменты командной строки Windows после того, как git bash заменит их инструментами unix Запуск сервера socket.io в реальном реальном сервере вместо localhost? Как выполнить проверку подлинности Windows? Перенос на сервер Fasthosts. Поиск пути сценариев для его обновления. Я получаю эту ошибку от apache Windows 10 все разрешения на все настройки DPI? Формат? Пиксельное искусство как значок? Значок большого размера в меню начального меню средней плитки? Почему mkdir не работает с тильдой (~)? Как я могу сделать кеш-память процессора в x86 Windows? GetWindowPlacement дает неправильное положение windows Собственный стиль оформления формы Как использовать clang с заголовками mingw-w64 на windowsх Как windows обрабатывают интерфейс буфера обмена с Xming? Балансировщик нагрузки NGINX Как определить файл – это изображение или нет в PHP

Невозможность получить обратный символ (\ b) в выводе на ubuntu (пример K & R)

#include  /* replacing tabs and backspaces with visible characters */ int main() { int c; while ( (c = getchar() ) != EOF) { if ( c == '\t') printf("\\t"); else if ( c == '\b') printf("\\b"); else if ( c == '\\') printf("\\\\"); else putchar(c); } return 0; } 

Теперь мой вопрос: почему я не вижу «\ b» в выходе? Я написал этот код в терминале Ubuntu. Есть ли другой способ получить символ «\ b» на выходе? Если есть, объясните в простых словах, поскольку я только начал изучать программирование на C. Это пример из упражнения K & R 1-10.

Запустите программу и введите Ctrl-H.

Ключ-код, отправляемый клавишей backspace (также: < ---) , скорее всего, есть оболочкой. Это зависит от того, как настроен терминал. Подробнее читайте здесь: http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-5.html

 Is there any other way to get the "\b" character in output ? 

Если вы подаете входной сигнал следующим образом:

ab backspace cd

к вашей программе, то это приведет к abc потому что это то, что shell передала программе.

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

 printf $'ab\bcd' | /path/to/executable 

и он напечатает ожидаемый результат, то есть:

 ab\bcd 

Это недопустимый код C. Он должен выглядеть так:

 #include  /* replacing tabs and backspaces with visible characters */ int main() { int c; while ( (c = getchar() ) != EOF) { if ( c == '\t') printf("\\t"); else if ( c == '\b') printf("\\b"); else if ( c == '\\') printf("\\\\"); else putchar(c); } // < -- note the closing curly brace return 0; } 

Вы должны подготовить файл, содержащий файл \b ( 0x08 ), и использовать его в качестве ввода для вашей программы. Другой способ - нажать Ctrl- H, а затем Enter (Спасибо @alk за комбинацию клавиш)

Я знаю, что это слишком поздно. ваш ответ на вашу проблему – сравнить c с 32 (ascii), а не с ‘\ t’.

 #include  /* replacing tabs and backspaces with visible characters */ main() { int c; while ( (c = getchar() ) != EOF) { if ( c == '\t') printf("\\t"); else if ( c == 32) printf("\\b"); else if ( c == '\\') printf("\\\\"); else putchar(c); } }