Intereting Posts

Понять поведение backspace (\ b) в C

Эта программа копирует свой вход в свой вывод, заменяя TAB ( \t ) на \t backspace ( \b ) на \b . Но здесь, в моем коде, я не могу прочитать входной символ, когда я ввожу backspace, не заменяя его как вкладку.

Компиляция с GCC в Linux:

 #include int main(void) { int c=0; while((c=getchar())!=EOF){ if(c=='\t'){ printf("\\t"); if(c=='\b') printf("\\b"); } else putchar(c); } return 0; } в #include int main(void) { int c=0; while((c=getchar())!=EOF){ if(c=='\t'){ printf("\\t"); if(c=='\b') printf("\\b"); } else putchar(c); } return 0; } 

Предположим, что если я набираю vinay (tab) hunachyal

 Output:vinay\thunachyal 

Если я нахожу vinay (и 1 backspace)

 Output:vina 

Итак, мой запрос – почему vina\b не печатает в этом случае?
Можно ли обнаружить \b и напечатать \b ? если нет, то почему

Note: Мне нужно, чтобы в промежутке времени выполнения во время выполнения не предоставлялся отдельный файл с \ b

    Backspace потребляется интерпретатором оболочки, поэтому ваша программа никогда не увидит его, также ваш код (слегка) сломан, из-за неправильной фигурной скобки, а не плохой отступ.

    Вот исправленная версия:

     #include int main(void) { int c=0; while((c=getchar())!=EOF){ if(c=='\t') printf("\\t"); else if(c=='\b') printf("\\b"); else putchar(c); } putchar('\n'); return 0; } в #include int main(void) { int c=0; while((c=getchar())!=EOF){ if(c=='\t') printf("\\t"); else if(c=='\b') printf("\\b"); else putchar(c); } putchar('\n'); return 0; } 

    которая работает так, как ожидалось:

     $ echo 'vinay\thunachyal\b' | ./escape vinay\thunachyal\b 

    Если я не неверно истолковал вопрос, вы можете использовать «Ctrl-H» для отправки backspace. Используя исправленный код трояна, при вводе:

     vinay^H 

    Он напечатает:

     vinay\b 

    ^ H означает «Ctrl-H», это символ ASCII # 8, который является backspace.