C言語printf()関数の使用

4738 ワード

printf()関数はC言語標準I/Oで最もよく使われるコンソール出力関数であり、私たちが最も一般的な%d,%c,%s,%fを除いて
printf()と%説明子はまた多くの機能豊富な出力形式を提供して、以下はdemoプログラムで、あなたのIDEにコピーして結果を見て、対照的に勉強することができます
 
【変換説明子demoプログラム】
#include 
/* \t      ,   tab ,
, */ int main() { /* %%, % */ printf("%%%%, %%
"); printf(" %%


"); /* %a,%A, 、 p- */ printf("%%a,%%A, 、 p-
"); printf("[3.14f]=%a\t[3.14f]=%A


", 3.14f, 3.14f); /* %c, */ printf("%%c,
"); printf("[A]=%c\t[&]=%c


", 'A', '&'); /* %d,%i, */ printf("%%d,%%i,
"); printf("[1024]=%d\t[-256]=%i


", 1024, -256); /* %e,%E, 、e- E- */ printf("%%e,%%E, 、e- E-
"); printf("[3.14f]=%e\t[3.14f]=%E


", 3.14f, 3.14f); /* %f, 、 */ printf("%%f, 、
"); printf("[3.14f]=%f\t[-3.14]=%f


", 3.14f, -3.14); /* %g,%G, %f %e , -4 %e */ printf("%%g,%%G, %%f %%e , -4 %%e
"); printf("[3.14e-5]=%g\t[3.14f]=%G


", 3.14e-5, 3.14f); /* %o, */ printf("%%o,
"); printf("[80]=%o\t[0123]=%o


", 80, 0123); /* %p, */ int *a; int b = 100; a = &b; printf("%%p,
"); printf("[a]=%p\t[&b]=%p


", a, &b); /* %s, */ printf("%%s,
"); printf("%s\t%s


", "Hello world.", " \t 。"); /* %u, */ printf("%%u,
"); printf("[123]=%u\t[-10]=%u


", 123, -10); /* %x,%X, ,0f 0F */ printf("%%x,%%X, ,0f 0F
"); printf("[100]=%x\t[0x12]=%X


", 100, 0x12); return 0; }

注意:
1、demoプログラム出力結果において、[]内はプログラミング時に書く定数の形式を表し、=後は出力結果
2、printf()には自動タイプ変換が存在し、例えば%fの-3.14に対する出力、-3.14はもともとdouble浮動小数点定数と考えられていたが、%fを使用しても変換タイプである後、floatタイプで出力する
3、printf()に暗黙的な進数変換が存在し、例えば%oにおける10進数80の出力、結果は8進数0120、表示は120、表示された8進数0123の出力に対して123が得られ、%oの表示結果が暗黙的な8進数であることを説明する.同理%xでは、10進数定数100に対して64が出力されるが、この64は0 x 64であるべきであり、0 x 12出力も12であり、これらの出力結果はいずれも非表示である
4、printf()で符号なし整数を出力するときは特に注意して、いつ%dを使うか、いつ%uを使うか、例えば%uで-10の出力を使うかを区別しなければならない.したがって−10は符号数の中で最も高い1であり,同じメモリを符号なしで出力するとすべてのビットを数値ビットと見なすので大きな数となる.
5、%sは文字列のエスケープ文字を識別することができます.例えば、%sの「こんにちは」の「tワールド」では、水平タブが認識され、%s出力時に「0エンド」は表示されません.
 
printf()は、以上の機能が豊富な%変換説明子のほか、機能を強化した変換説明修飾子もあり、多くの優れたプログラミングテクニックを提供しています.
【変換説明修飾子demoプログラム】
#include 

int main(void)
{
	/* -,    */
	printf("-,   
"); printf("%-d


", 12); /* +, , */ printf("+, ,
"); printf("%+f\t%+d


", 3.14f, -1024); /* ( ),% , , */ printf("( ),% , ,
"); printf("% f\t% e


", 3.14f, -6.28e-4); /* #, */ printf("#,
"); printf("%#o\t%#x\t%#


", 0123, 0x12); /* 0, , 0 */ printf("0, , 0
"); printf("%010d\t%08.3f


", 12, 3.14f); /* , */ printf(" ,
"); printf("%4d\t%4d\t%4d


", 12, 1234, 123456); /* . , , , %8.3f 8, 3 */ printf(". , , , %%8.3f 8, 3
"); printf("%8.3f\t%5.2f\t%3.1f


", 12.12345, 12.12345, 12.12345); /* h, short */ printf("h, short
"); printf("%hu\t%hx\t%5.5hd


", 1024, 0x12, 10240); /* hh, char */ printf("hh, char
"); printf("%hhu\t%hhx\t%6.4hd


", 1024, 0x12, 10240); /* l, long */ printf("l, long
"); printf("%ld\t%8lu


", -111222, 12345); /* ll, long long long long */ printf("ll, long long long long
"); printf("%lld\t%8llu


", 33334444, -123321); /* L, long double */ printf("L, long double
"); printf("%Lf\t%10.4Le


", 3.1415926, 3.1415926); return 0; }

注意:
1、どのように修飾しても、必ず符号数のない出力に注意しなければならない.例えば、上記%8 lluの対-123321の出力は、依然として誤り値であり、根本的には%uの対負数の出力というよくある誤りである.
2、demoから分かるように、修飾子は重畳することができ、例えば%1.3 Lfは出力のlong doubleデジタルセグメントの長さが10であり、千分位まで正確であることを表す.
3、%8 d、%4 fのような制御フィールドの長さの使い方は多くのアルゴリズム設計大会でよく見られる使いやすいテクニックであり、興味のある学生は練習に重点を置くことができる.