C 言語でフォーマットされたテキストを出力する

胡金庫 2023年10月12日
  1. 指定子 %s を使って printf 関数を使って文字列を出力する
  2. 指定子 %i を用いた printf 関数を用いて整数を出力する
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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C IO