为什么这个C程序不会获取转义反斜杠?

时间:2010-08-12 07:12:08

标签: c kernighan-and-ritchie

我正在做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?,这意味着它转换了选项卡OK,但不是反斜杠。

我做错了吗?

4 个答案:

答案 0 :(得分:5)

您可能希望printf("\\\\");,而不只是printf("\\");

答案 1 :(得分:2)

你应该打印反斜杠它的逃脱。

目前你只是打印反斜杠 - 在这里你要逃避第二个反斜杠,否则会逃脱收盘双重报价:

printf("\\");

答案 2 :(得分:2)

使用printf("\\\\")

答案 3 :(得分:2)

C编译器在源代码中找到\\时会做什么?