C 言語でフォーマットされたテキストを出力する
この記事では、C 言語でフォーマットされたテキストをコンソールに出力する方法をいくつか紹介します。
指定子 %s
を使って printf
関数を使って文字列を出力する
関数 printf
は標準入出力ライブラリの中で最も利用されている部分の一つです。実際には、複数のシナリオに特化した printf
関数群があり、そのすべてがこのページで詳細に説明されています。この記事では、printf
関数を使ったフォーマットされた出力のデモのみを行います。
printf
は可変数の引数を取ることができるという点でユニークです。つまり、関数のパラメータは書式文字列とその他の引数の 2つの部分に分けることができます。書式文字列は関数の書式設定部分を指定し、通常の文字と %
記号で始まる指定子を含む。最も単純な形式は以下の例で示されています。最初の呼び出しでは printf
は文字列そのものを唯一の引数として受け取り、2 回目の呼び出しではフォーマット文字列の中の単一の %s
指定子を宣言し、その後に文字列変数の引数が続きます。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char* str1 = "fabulae mirabiles";
printf("String literal\n");
printf("%s\n", str1);
exit(EXIT_SUCCESS);
}
出力:
String literal
fabulae mirabiles
フォーマット文字列のもう一つの便利な機能は、関数に渡される文字列引数から表示する文字数を指定することです。次のコード例では、この問題に対する 2つの解決策を示しています。
最初のコードでは、%
と s
の間に文字数を表す整数を入れています。2 番目の printf
呼び出しは *
文字を代わりに置き、ユーザが引数の 1つから積分値を渡すことを可能にします。後者の方法の利点は、実行時に値を計算できることですが、前者の方法では値をハードコーディングする必要があるのに対し、後者の方法では値を計算できることです。どちらの場合も、%
記号の後に .
をつける必要があることに注意してください。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char* str1 = "fabulae mirabiles";
printf("%.6s\n", str1);
printf("%.*s \n", 6, str1);
exit(EXIT_SUCCESS);
}
出力:
fabula
fabula
指定子 %i
を用いた printf
関数を用いて整数を出力する
printf
は異なる表現で整数を表示することができます。一般的な方法としては、整数値を表示する基底を変更することなどがあります。整数の引数は %i
または %d
指定子で表すことができます。正と負の数値は自動的にフォーマットされますが、正の数値はプラス記号で表示されず、明示的な指定子 %+i
で含めることができます。16 進数と 8 進数は、%x
と %o
指定子に対応して出力することができます。指定子 %X
は 16 進数を大文字で表示します。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("%i %d %.6i %+i %i\n", 11, 22, 12, 41, -31);
printf("%.4x %x %X %#x\n", 126, 125, 125, 100);
printf("%.4o %o\n", 8, 11);
exit(EXIT_SUCCESS);
}
出力:
11 22 000012 +41 -31
007e 7d 7D 0x64
0010 13