Не будучи в состоянии получить символ backspace (b) в выводе на ubuntu (пример K&R)
#include <stdio.h>
/* 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 "в выводе? Если есть, пожалуйста, объясните простыми словами, как я только начал изучать программирование на Си.Этот пример взят из упражнения K&R 1-10.
4 ответа:
Запустите программу и введите 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
, потому что это то, что оболочка передала программе.Убедитесь, что вы посылаете правильный вводв программу . Призовите его, сказав:
printf $'ab\bcd' | /path/to/executable
И он выведет ожидаемый результат, т. е.:
ab\bcd
Это недопустимый C-код. Это должно выглядеть так:
#include <stdio.h> /* 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 и затем введите (Спасибо @alk за комбинацию клавиш)
Я знаю, что уже слишком поздно. ваш ответ на вашу проблему-сравнить c с 32 (ascii), а не с '\t'.
#include <stdio.h> /* 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); } }