07_C言語の出力と書式指定


■ 07_1 標準出力とは

C言語では、モニタやキーボードなど入力や出力に使うものを「ファイル」として扱います。 画面への出力のことを「標準出力(standard output)」と呼びます。通常、これは モニタ に表示されます。

printf("こんにちは\n");

上記のように printf() 関数を使って、文字列を出力できます。


■ 07_2 printf() の基本

構文

printf("書式指定文字列", 値1, 値2, ...);

例:

printf("合計は %d 点です", 95);

■ 07_3 制御文字(コントロールキャラクタ)

画面に文字を表示するだけでなく、改行タブなど、出力のレイアウトを整えるための特別な動作を指示したいときがあります。
そのようなときに使うのが 制御文字(コントロールキャラクタ) です。

ただし、これらはキーボードから直接入力できないため、特別な書き方(エスケープシーケンス)で表現します。
以下はよく使われる制御文字と、その意味です:

エスケープシーケンス 動作の意味
\n 改行
\t タブ(空白をあける)
\\ バックスラッシュ \ の表示
\" ダブルクォート " の表示

これらの制御文字は、ASCIIコードの0〜31番や127番といった「非表示文字」に割り当てられており、画面上に表示するのではなく、出力の動作を制御するために使われます。

コード例を示します。

printf("お買い上げの\"金額\"\n\t\\13,280-    です\n");

出力結果:
お買い上げの"金額"は
\13,280- です

解説:
\" → ダブルクォーテーション "の表示
\n → 改行
\t → タブ(横方向のスペース)
\ → バックスラッシュ \


■ 07_4 printf() のコード例

#include <stdio.h>

int main(void) {
    int x = 42;
    printf("x = %d\n", x);
    return 0;
}

■ 07_5 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;
}

■ 07_6 書式指定(フォーマット指定)

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

語源から考えると覚えやすい。


■ 07_7 実行例

コードに書いて動かしてみましょう。
ファイル名: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進数(大文字)で出力
となります。


■ 07_8 書式の幅指定と整形

幅を指定する

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文字幅で右寄せ)


07_7 まとめ