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