Не будучи в состоянии получить символ 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 2

4 ответа:

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);
   } 
}