Почему эта C-программа не может получить экранированные символы обратной косой черты? - PullRequest
2 голосов
/ 12 августа 2010

Я делаю упражнение K & R 1-10

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

Я придумал это ...

#include <stdio.h>

int main () {

    int c;
    printf("\n"); // For readability

    while ((c = getchar()) != EOF) {

        switch (c) {
            case '\t':
                printf("\\t");
                break;
            case '\b':
                printf("\\b");
            case '\\':
                printf("\\");
                break;
            default:
                printf("%c", c);
                break;
        }

    }

}

По какой-то причине он отказывается коснуться обратной косой черты. Например, выходные данные из программы при подаче строки, такой как Hello how\ are you?, равны Hello\thow\ are you?, что означает, что она преобразует вкладку ОК, но не обратный слеш.

Я что-то не так делаю?

Ответы [ 4 ]

5 голосов
/ 12 августа 2010

Вы, вероятно, хотите printf("\\\\"); вместо просто printf("\\");.

2 голосов
/ 12 августа 2010

Что делает компилятор C, когда находит \\ в источнике?

2 голосов
/ 12 августа 2010

Использование printf("\\\\")

2 голосов
/ 12 августа 2010

Вы должны печатать обратную косую черту и ее выход.

В настоящее время вы просто печатаете обратную косую черту - здесь вы избегаете второй обратной косой черты, которая в противном случае избежала бы закрывающей двойной кавычки:

printf("\\");
...