printf()関数の基本的な使い方を理解する%d や %s などの書式指定を使いこなすC言語では、モニタやキーボードなど入力や出力に使うものを「ファイル」として扱います。 画面への出力のことを「標準出力(standard output)」と呼びます。通常、これは モニタ に表示されます。
printf("こんにちは\n");
上記のように printf() 関数を使って、文字列を出力できます。
printf() の基本printf("書式指定文字列", 値1, 値2, ...);
% に続く文字が 書式指定子 で、それぞれの値の表示方法を表す。, で区切って、指定した順番に値を渡す。例:
printf("合計は %d 点です", 95);
画面に文字を表示するだけでなく、改行やタブなど、出力のレイアウトを整えるための特別な動作を指示したいときがあります。
そのようなときに使うのが 制御文字(コントロールキャラクタ) です。
ただし、これらはキーボードから直接入力できないため、特別な書き方(エスケープシーケンス)で表現します。
以下はよく使われる制御文字と、その意味です:
| エスケープシーケンス | 動作の意味 |
|---|---|
\n |
改行 |
\t |
タブ(空白をあける) |
\\ |
バックスラッシュ \ の表示 |
\" |
ダブルクォート " の表示 |
これらの制御文字は、ASCIIコードの0〜31番や127番といった「非表示文字」に割り当てられており、画面上に表示するのではなく、出力の動作を制御するために使われます。
コード例を示します。
printf("お買い上げの\"金額\"は\n\t\\13,280- です\n");
出力結果:
お買い上げの"金額"は
\13,280- です
解説:
\" → ダブルクォーテーション "の表示
\n → 改行
\t → タブ(横方向のスペース)
\ → バックスラッシュ \
printf() のコード例#include <stdio.h>
int main(void) {
int x = 42;
printf("x = %d\n", x);
return 0;
}
%d は整数を表示するための書式指定子です。printf() のコード例2 複数データを表示また、複数の値を一行で整えて表示したいとき、printf() に複数の書式指定子を並べて使います。
#include <stdio.h>
int main(void) {
int x = 42;
int y = 37;
printf("x = %d,y = %d\n", x, y);
return 0;
}
printf() では % を使って、数値や文字列を整った形で表示できます。
| 書式 | 意味 | 英語表現 | 語源 | 使用例 |
|---|---|---|---|---|
%d |
10進整数 | decimal | deci = 10進数 | 123 |
%x |
16進整数 | hexadecimal | hexa=6 + deci=10 | 7b |
%o |
8進整数 | octal | octa = 8進数 | 173 |
%c |
1文字 | char | character | 'A' |
%s |
文字列 | string | string(文字列) | "ABC" |
%f |
実数 | float | 浮動小数点 | 3.14 |
語源から考えると覚えやすい。
コードに書いて動かしてみましょう。
ファイル名:05-4_format_sample.c
#include <stdio.h>
int main(void) {
int num = 100;
printf("1: 10進数 = %d\n", num);
printf("2: 8進数 = %o\n", num);
printf("3: 16進数 = %x\n", num);
printf("4: 16進数 = %X\n", num);
num = 0x61;
printf("4: 文字コード = %d, %x, %c\n", num, num, num);
return 0;
}
%dでは10進数で出力
%oでは8進数で出力
%xでは16進数(小文字)で出力
%xでは16進数(大文字)で出力
となります。
printf("[%5d]\n", 32); // 幅5で右寄せ
printf("[%-5d]\n", 32); // 幅5で左寄せ
printf("[%05d]\n", 32); // ゼロ埋め
printf("[%s]\n", "moji");
printf("[%7s]\n", "moji"); // 幅7で右寄せ
printf("[%-7s]\n", "moji"); // 幅7で左寄せ
printf("[%6.4s]\n", "ELEPHANT"); // 先頭4文字を6幅で表示
Q1. 改行を表す制御文字はどれか?
ア. \t
イ. \"
ウ. \n
エ. \r
解説を表示
正解:ウ(\n)
Q2. printf("[%05d]", 7); の出力として正しいものは?
ア. [7 ]
イ. [00007]
ウ. [ 07]
エ. [70000]
解説を表示
正解:イ(ゼロ埋めで5桁になる)
Q3. printf("[%6.3s]", "tiger"); の出力は?
ア. [tiger ]
イ. [ tiger]
ウ. [ tig]
エ. [t i g]
解説を表示
正解:ウ(3文字分の"tig"を6文字幅で右寄せ)
printf()で文字や数値を出力できる\n, \tなどの制御文字で整った出力が可能%d, %sなどの書式指定を使うことでデータをフォーマットできる