web-dev-qa-db-ja.com

cでパーセント記号(%)を印刷するにはどうすればよいですか

私はCの初心者であり、このプログラムがなぜ%記号を印刷しないのか疑問に思っていました。

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

#include<stdio.h>

main()
{
     printf("%");
     getch();
}
28
Paul Filch

あなたの問題はあなたが変えなければならないことです:

printf("%"); 

printf("%%");

または、ASCIIコードを使用して次のように記述できます。

printf("%c", 37);

:)

このトピックでは、パーセント記号を印刷する理由は説明されていません。たとえば、パーセントのエスケープ文字-_%%_ではなく、_\%_と入力する必要があります。

from comp.lang.c FAQリスト・質問12.6

Printfで%記号を印刷するのが難しいのは、%が本質的にprintfのエスケープ文字であるためです。 printfは%を検出するたびに、次に何をすべきかを伝える文字が続くことを想定しています。 2文字のシーケンス%%は、単一の%を出力するように定義されています。

\%が機能しない理由を理解するには、バックスラッシュ\がコンパイラのエスケープ文字であり、コンパイル時のコンパイラによるソースコード文字の解釈方法を制御することに注意してください。ただし、この場合、実行時にprintfがそのフォーマット文字列を解釈する方法を制御します。コンパイラに関する限り、エスケープシーケンス\%は未定義であり、おそらく単一の%文字になります。 printfが\を特別に処理する準備ができていても、\と%の両方がprintfに到達することはありそうにないでしょう。

したがって、単一の%を出力するためにprintf("%%");と入力する必要がある理由は、printf関数で定義されていることです。 %はprintfのエスケープ文字であり、コンパイラの\です。

15
macfij

つかいます "%%"manページ は、この要件を説明しています。

%「%」が書き込まれます。引数は変換されません。完全な変換仕様は '%% '。

7
Carl Norum

この方法で印刷してみてください

printf("%%");
1
Santhosh Pai