вторник, 31 декабря 2013 г.

Упражнение 1.10.

Напишите программу, копирующую вводимые символы в выходной поток с заменой
символа табуляции на \t, символа забоя на \b и каждой обратной наклонной
черты на \\. Это делает видимыми все символы табуляции и забоя.

$ vim replace.c

#include <stdio.h>

int main(void)
{
        int c;
        int n;  /* если ни один из нужных */

        while((c = getchar()) != EOF)
        {
                n = 0;

                if (c == '\t')
                {
                        printf("\\t");
                        n = 1;
                }

                if (c == '\b')
                {
                        printf("\\b");
                        n = 1;
                }

                if (c == '\\')
                {
                        printf("\\\\");
                        n = 1;
                }

                if (n != 1)
                        putchar(c);
        }

        return 0;
}

$ cc -g -O0 -Wall -o a.out replace.c
$ ./a.out

Test    Test
Test\tTest
Test\Test
Test\\Test
Test    \\      Test
Test\t\\\\\tTest

2 комментария:

  1. у меня что-то пошло не так (https://codeshare.io/aynDDv), консоль Убунту выводит в ответ на:
    21 12 32
    вот это:
    21 12 32
    то бишь тупо удваивает табуляцию. причем на ctrl-d реагирует, как и в прошлом примере, со второго раза.

    ОтветитьУдалить
  2. в комментах табуляция не видна. В общем, вывод не соответствует ожиданию: вместо замены эскейп-последовательности на ее обозначение код удваивает ее почему-то.

    ОтветитьУдалить