質問: C言語において、`printf` と `puts` という2つの標準出力のための関数がありますが、この2つはどのように違うのでしょうか? ``` #include int main(void){ printf("hello world"); puts("hello world"); } ```
回答: 「文字列を出力する」という役割は同じですが、`printf` ではどのように出力するのかフォーマットを細かく指定できるのが特徴です。 printf では `%` 記号から始まる "変換指定子" と出力したい "変数" のペアを指定するのが一般的な使い方で、数値の桁数や文字列の出力幅、右寄せ or 左寄せなどを指定できます。 ``` #include void main(){ int i; printf("%d\n", 200); /* 200 */ printf("%i\n", 200); /* 200 */ printf("% d\n", 200); /* 200 */ printf("% d\n", -200); /* -200 */ printf("%+d\n", 200); /* +200 */ printf("%+d\n", -200); /* -200 */ printf("%o\n", 200); /* 310 */ printf("%#o\n", 200); /* 0310 */ printf("%x", 200); /* c8 */ printf("%#x", 200); /* 0xc8 */ printf("%#X\n", 200); /* 0XC8 */ printf("%f\n", 123.456); /* 123.456000 */ printf("%10.2f\n", 123.456); /* 123.46 */ printf("%010.2f\n", 123.456); /* 0000123.46 */ printf("%e\n", 123.456); /* 1.234500e+02 */ printf("%E\n", 123.456); /* 1.234500E+02 */ printf("%10.3e\n", 123.456); /* 1.235e+02 */ printf("%g\n", 123.456); /* 123.456 */ printf("%g\n", 0.0000123456); /* 1.23456e-05 */ printf("[%c]\n", 'h'); /* [h] */ printf("[%*c]\n", 5, 'h'); /* [ h] */ printf("This is a %s.\n", "string"); /* This is a string. */ printf("[%s]\n", "overlength"); /* [overlength] */ printf("[%*s]\n", 5, "overlength"); /* [overlength] */ printf("[%.*s]\n", 5, "overlength"); /* [overl] */ printf("Address: %p\n", main); /* Address: 00401330 */ printf("this many of chars are written so far:%n", &i); printf("%d\n", i); /* this many of chars are written so far:38 */ } ```