1

簡単なコードは次のとおりです。

#include <stdio.h>

int main() {
    printf("Hello\tworld");
    char line[1000];
    gets(line);
    printf("%s\n",line);
    return 0;
}

したがって、「Hello\tworld」と入力すると、「Hello\tworld」と出力されますが、定義済みの文字列「Hello\tworld」は次のように出力されます。

hello       world

gets 関数にエスケープシーケンスを認識させる方法はありますか?

4

4 に答える 4

2

stdin に "\t" と入力すると、入力したものが取得されます。これは ascii ではなくとして保存さ'\'れます。 stdin で"tab-key" を使用しないのはなぜですか?'t''\t'\t

于 2012-04-18T03:11:57.547 に答える
1

printf( "Hello \ tworld");の文字列 コンパイラによってコンパイルされた文字列に変換され、エスケープコードが文字に変換されるため、printf関数を実行すると、2文字の「\ t」文字列は表示されませんが、1つの表文字の同等のコードが表示されます。ただし、gets()関数は、実行時にすべての型指定された文字の文字列を取得し、エスケープコードを変換しません。したがって、これらのエスケープコードを変換する場合は、置換関数を作成する必要があります。

于 2012-04-18T03:57:11.447 に答える
0

get関数は、記号(例:\ t \ n)を調べず、入力された各文字のASCIIを指定するだけです。私の知る限り、気になるものを手動で交換する以外に、そのようなことに注意を向けさせる方法はありません。scanfも同じ方法で、同じ問題が発生します。

于 2012-04-18T03:20:48.100 に答える
0

私が知っているわけではありません。エスケープされた文字シーケンスの発生を対応する文字に手動で置き換える必要があります

于 2012-04-18T03:11:01.803 に答える