Shunk

Shunk/C言語から学ぶ「標準出力」

Created Sat, 29 Jun 2024 09:44:02 +0900
1396 Words 6 min

初めに

この記事の対象者はプログラミング初心者。 授業の復習がてら自分の言葉でまとめています。

前提

今回つかう例は前回の記事と同じもの

#include<stdio.h>

int main()
{
    int a;
    int b;
    int sum;
    a = 10;
    b = 20;
    sum = a + b;
    printf("output\n");
    printf("%d+%d=%d\n", a, b, sum);
}

変数の作成と値の代入は前回の記事で分かっただろう。 そこで今回はその下の行にある *printf()*について解説していく

標準出力とは

厳密な定義は置いておくとして、簡単にいうと コンピュータがした処理の結果をどうにかして、我々人間に伝える方法のことだ。

今回のコードだとターミナルに文字が出力されて、人間の目に見えるようになることをいう。

printf

printf("output\n"); という記述がある。

printfというのはprint(印刷)という言葉が示すように、ターミナルに文字を表示させるための関数だ。

printf()の()の部分の中に入れておいた文字をターミナルに表示してくれる。 非常にシンプルだし、ここまではわかりやすい。

ここで先ほどのコードを見るとprintf("output\n"); “output\n"という文字がターミナルに表示されると思うだろう。

しかし実際にコンパイルして実行してみると。outputしか出てこない。

これは \n が 改行を表す呪文だからだ。

このように呪文がいくつかある。 これがややこしい!

今回学ぶ呪文:「変換文字」

\nは改行を表すということを説明したが、もう一つ呪文が出てきている。 %dだ。 これは標準出力に使うための「変換文字」と呼ばれるものだ。 意味がわからないと思う。

この呪文がやっていることは、特定の型のデータを参照して表示するということだ。

イメージを掴むためにコードを見てみよう。

    printf("%d+%d=%d\n", a, b, sum);

この部分少し複雑なので分割してみてみよう

    printf(
        "%d+%d=%d\n",
        a, 
        b, 
        sum
    );

,で値をくぎれるので、このコードの意味としては printf関数に「%d+%d=%d\n”」「a」「b」 「sum」の四つの値を渡しているということだ。 三つの%dはその後に渡された「a」「b」 「sum」の値を順番に参照して表示してくれる。

少しはイメージが掴めただろうか?

このように値を参照する変換文字はいくつか存在する。 今回はint(数字)型に対応しているものだったので、%dだったが他の型に対応しているものもある。

指定子データ型説明
%cchar1文字を出力する“%c”
%schar *文字列を出力する“%8s”, “%-10s”
%dint, short整数を10進で出力する“%-2d”, “%03d”
%uunsigned int, unsigned short符号なし整数を10進で出力する“%2u”, “%02u”
%oint, short, unsigned int, unsigned short整数を8進で出力する“%06o”, “%03o”
%xint, short, unsigned int, unsigned short整数を16進で出力する“%04x”
%ffloat実数を出力する“%5.2f”
%efloat実数を指数表示で出力する“%5.3e”
%gfloat実数を最適な形式で出力する“%g”
%ldlong倍精度整数を10進で出力する“%-10ld”
%luunsigned long符号なし倍精度整数を10進で出力する“%10lu”
%lolong, unsigned long倍精度整数を8進で出力する“%12lo”
%lxlong, unsigned long倍精度整数を16進で出力する“%08lx”
%lfdouble倍精度実数を出力する“%lf”

参考記事

標準出力以外の呪文

今回は解説しないが他にもこのような呪文がある。 覚えておく必要はないが、こういうものがあるということは知っておこう。


\a      警報音
\b      バックスペース
\n      復帰改行
\r      復帰
\f      改ページ
\t      水平タブ
\v      垂直タブ
\\      文字としての\
\?      文字としての?
\'      シングルクォーテーション(')
\"      ダブルクォーテーション(")
\0      Null(ヌル)
\ooo    8進数の文字コードを持つ文字
\xhh    16進数の文字コードを持つ文字

この表は参考サイトからお借りしました。