Невозможность получить обратный символ (\ 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); } }