318

printfCで使用するときに%記号をどのようにエスケープしますか?

printf("hello\%"); /* not like this */
4

13 に答える 13

486

次のように二重の '%' を投稿することでエスケープできます。%%

あなたの例を使用して:

printf("hello%%");

「%」記号のエスケープはprintfのみです。もしあなたがそうするなら:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

それは印刷されます:This is a's value: %%

于 2009-12-07T14:03:32.017 に答える
43

他の人が言ったように、 %% は % をエスケープします。

ただし、これを行うべきではないことに注意してください。

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

文字列を印刷する必要があるときはいつでも、常に、常に、常に次を使用して印刷します

printf("%s", c)

埋め込まれた % が問題 (メモリ違反、セグメンテーション違反など)を引き起こすのを防ぐため。

于 2009-12-07T14:06:41.167 に答える
34

文字列にフォーマットがない場合は、puts(またはfputs)を使用できます。

puts("hello%");

文字列にフォーマットがある場合:

printf("%.2f%%", 53.2);

コメントに記載されているように、出力にputsa を追加し、追加しません。\nfputs

于 2009-12-07T14:04:59.030 に答える
11

それ自体で...

printf("hello%%"); /* like this */
于 2009-12-07T14:03:58.707 に答える
7

Nitpick:関数の(and ) ファミリの形式を指定する文字列で、実際に
はエスケープしません。%printf()scanf()

(および) 関数ファミリーの%は、変換指定を開始します。変換指定の規則の 1 つは、変換指定子としての a (変換指定を開始した の直後) により、引数が変換されずに文字が書き込まれることを示しています。printf()scanf()%%'%'

文字列には、実際には 2'%'文字が含まれています (エスケープ文字とは対照的に"a\bc"、 は 3 つの非 null 文字を含む"a%%b"文字列です。 は 4 つの非 null 文字を含む文字列です)。

于 2009-12-07T14:28:42.333 に答える
6

double%%を使用します。

printf("hello%%");
于 2009-12-07T14:04:10.030 に答える
5

このような:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together
于 2009-12-07T14:28:18.840 に答える
5

間違った書式指定子を使用しています。%%印刷に使用する必要があります%。コードは次のようになります。

printf("hello%%");  

C で使用されるすべての書式指定子を参照してください。

于 2015-05-25T03:38:43.283 に答える
5

%% を使用できます:

printf("100%%");

結果は次のとおりです。

100%

于 2016-08-19T14:38:55.347 に答える
4

C のバックスラッシュは、文字列内の文字をエスケープするために使用されます。文字列は特殊文字として認識さ%れないため、エスケープは必要ありません。printfは別の問題です。使用%%して 1 つを印刷します%

于 2009-12-07T14:07:08.963 に答える
3

はい、使用printf("hello%%");して完了です。

于 2009-12-08T05:40:43.227 に答える
3

単純に 2 回使用できます%。つまり、"%%"

例:

printf("You gave me 12.3 %% of profit");
于 2016-07-23T19:14:35.000 に答える
2

ダブル '%' は ".Format(…) でも機能します。例 (iDrawApertureMask == 87、fCornerRadMask == 0.05 を使用): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; csCurrentLine; "%ADD87C, 0.0500*% (文字列の内容) の望ましい値と期待値を示します。 "

于 2017-10-21T17:35:01.197 に答える