2

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?isのような文字列が与えられたときのプログラムからの出力はHello\thow\ are you?、タブは OK に変換されましたが、バックスラッシュは変換されなかったことを意味します。

私は何か間違ったことをしていますか?

4

4 に答える 4

5

printf("\\\\");だけではなく、おそらくしたいでしょうprintf("\\");

于 2010-08-12T07:14:37.100 に答える
2

バックスラッシュそのエスケープを出力する必要があります。

現在、バックスラッシュを印刷しているだけです-ここでは、2番目のバックスラッシュをエスケープしています。そうしないと、終了の二重引用符がエスケープされます。

printf("\\");
于 2010-08-12T07:14:08.330 に答える
2

使用するprintf("\\\\")

于 2010-08-12T07:14:16.677 に答える
2

\\ソース内で見つかった場合、C コンパイラは何をしますか?

于 2010-08-12T07:14:57.527 に答える