Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の文字列出力関数を徹底解説!puts()とprintf()の違いと使い分け

C言語において、文字列を画面に出力する際に使用される代表的な標準ライブラリ関数が puts()printf() です。この2つの関数は、いずれもヘッダーファイル「stdio.h」で宣言されており、テキストを出力ストリームへ送るために使われますが、用途や構文、動作には明確な違いがあります。本記事では、それぞれの特徴と使い方をサンプルコード付きで詳しく解説します。

puts()関数とは

puts() は、指定した文字列を出力ストリームに表示し、自動的に改行文字「\n」を追加する関数です。出力後はカーソルが次の行に移動します。書式指定などの複雑な処理を行わないため、実装がシンプルで、printf() よりも軽量・高速に動作するというメリットがあります。

puts()の基本構文

puts("文字列");

もし出力後にカーソルを次の行へ移動させたくない場合は、代わりに fputs() を使用します。

fputs(文字列, stdout)

puts()の使用例

以下は、puts()fputs() を組み合わせたサンプルプログラムです。

サンプルコード

#include<stdio.h>
int main() {
   puts("これはデモです。");
   fputs("改行なし。", stdout);
   puts(" ようこそ!");
   getchar();
   return 0;
}

実行結果

これはデモです。
改行なし。 ようこそ!

puts() は毎回末尾で改行されるのに対し、fputs() は改行せずに出力するため、その直後に続く文字列は同じ行に表示されます。

printf()関数とは

printf() は、文字列だけでなく、変数の値などを書式指定子(%d、%s、%fなど)を使って整形して出力できる汎用的な関数です。書式解析などの内部処理が複雑なため、その分処理コストが高く、単純な文字列出力だけなら puts() の方が効率的です。

printf()の基本構文

printf("文字列");

printf()の使用例

以下は、固定文字列と変数の値を同時に出力するサンプルプログラムです。

サンプルコード

#include<stdio.h>
int main() {
   int a = 10;
   printf("Hello world! \n");
   printf("変数aの値 : %d", a);
   getchar();
   return 0;
}

実行結果

Hello world!
変数aの値 : 10

puts()とprintf()の使い分けのポイント

  • 単純な文字列出力のみの場合は、自動改行付きで高速な puts() が適しています。
  • 変数の値や書式付きデータを出力したい場合は、柔軟な printf() を選びましょう。
  • 改行したくない場合は fputs() を活用すると便利です。

用途に応じてこれらの関数を使い分けることで、より可読性が高く効率的なC言語プログラムを書くことができます。

  1. C言語のswitch文とは?基本構文・アルゴリズム・サンプルコードでわかりやすく解説

    switch文は、複数の選択肢の中から1つだけを実行したい場合に使われる条件分岐の制御構造です。switch文は、指定した式の値を整数定数や文字定数のリストと順番に照合していき、一致するcaseが見つかった時点で、そのcaseに紐づくステートメント(文)が実行されます。 switch文の基本構文 switch文の基本的な書き方は以下の通りです。 switch (式){    case 値1 : 文1;       break;    case 値2 : 文2;       break; &nbs

  2. 言語 L = {ww | w ∈ {0,1}} を認識するチューリングマシンの構築方法

    言語 L = {ww | w ∈ {0,1}} とはここでは、言語 L = {ww | w ∈ {0,1}} を認識するチューリングマシンの構築方法を解説します。この言語は、記号 0 と 1 のみから構成される文字列 w が2回繰り返された形(ww)の集合を表しています。例えば、w = 10110 の場合、チューリングマシンが受理すべき文字列は z = 1011010110 となります。解法のアプローチステップ1:文字列の中点を見つけるまず最初の目標は、文字列の中点を特定することです。そのために、左端の記号(0 なら x、1 なら y)と右端の記号(0 なら x、1 なら y)を順次変換しなが