私はCの初心者であり、このプログラムがなぜ%記号を印刷しないのか疑問に思っていました。
コードは次のとおりです。
#include<stdio.h>
main()
{
printf("%");
getch();
}
あなたの問題はあなたが変えなければならないことです:
printf("%");
に
printf("%%");
または、ASCIIコードを使用して次のように記述できます。
printf("%c", 37);
:)
このトピックでは、パーセント記号を印刷する理由は説明されていません。たとえば、パーセントのエスケープ文字-_%%
_ではなく、_\%
_と入力する必要があります。
from comp.lang.c FAQリスト・質問12.6 :
Printfで%記号を印刷するのが難しいのは、%が本質的にprintfのエスケープ文字であるためです。 printfは%を検出するたびに、次に何をすべきかを伝える文字が続くことを想定しています。 2文字のシーケンス%%は、単一の%を出力するように定義されています。
\%が機能しない理由を理解するには、バックスラッシュ\がコンパイラのエスケープ文字であり、コンパイル時のコンパイラによるソースコード文字の解釈方法を制御することに注意してください。ただし、この場合、実行時にprintfがそのフォーマット文字列を解釈する方法を制御します。コンパイラに関する限り、エスケープシーケンス\%は未定義であり、おそらく単一の%文字になります。 printfが\を特別に処理する準備ができていても、\と%の両方がprintfに到達することはありそうにないでしょう。
したがって、単一の%を出力するためにprintf("%%");
と入力する必要がある理由は、printf関数で定義されていることです。 %はprintfのエスケープ文字であり、コンパイラの\です。
つかいます "%%"
。 manページ は、この要件を説明しています。
%
「%」が書き込まれます。引数は変換されません。完全な変換仕様は '%%
'。
この方法で印刷してみてください
printf("%%");