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

C++におけるprintf()とcoutの違いを徹底解説

C++プログラミングでは、コンソールへの出力方法として「printf()」と「cout」の2つが使われます。どちらも画面に文字や数値を表示できますが、その仕組みや特性には大きな違いがあります。本記事では、それぞれの特徴をコード例とともにわかりやすく解説します。


printf()とは

printf()は主にC言語で使用される関数で、標準出力(コンソール)に書式付きでデータを出力するためのフォーマット関数です。C++でも引き続き利用できますが、引数の型チェックが行われないため型安全ではないという特徴があります。また、戻り値として出力した文字数を表す整数値を返します。

printf()の基本構文は以下の通りです。

printf("文字列と書式指定子", 変数名);

各要素の意味は次の通りです。

  • 文字列 − コンソールに出力するテキストやメッセージ

  • 書式指定子 − 変数のデータ型に応じて「%d」(整数)、「%s」(文字列)、「%f」(浮動小数点)などを指定

  • 変数名 − 出力したい変数の名前

例:C言語でのprintf()の使い方

#include<stdio.h>
int main() {
    int a = 24;
    printf("Welcome! \n");
    printf("The value of a : %d",a);
    getchar();
    return 0;
}

実行結果

Welcome!
The value of a : 24

coutとは

coutはC++専用の出力手段で、iostreamヘッダで定義されている出力ストリームオブジェクトです。挿入演算子「<<」を使ってデータをコンソールへ出力します。printf()と異なり書式指定子が不要で、変数の型を自動的に判別してくれるため型安全です。また、出力処理自体は戻り値を返しません。

coutの基本構文は以下の通りです。

cout << "文字列" << 変数名 << endl;

各要素の意味は次の通りです。

  • 文字列 − コンソールに出力するテキストやメッセージ

  • 変数名 − 宣言時に付けた変数の名前

なお、「endl」は改行を出力すると同時にバッファをフラッシュするマニピュレータです。「\n」を使っても改行できます。

例:C++でのcoutの使い方

#include <iostream>
using namespace std;
int main() {
    int a = 28;

    cout<< "The value of a : " << a;
    printf("\nThe value of a : %d", a);

    return 0;
}

実行結果

The value of a : 28
The value of a : 28

printf()とcoutの違いまとめ

項目printf()cout
主な使用言語C言語(C++でも使用可)C++専用
種類関数オブジェクト(ostreamクラス)
書式指定子必要(%d、%sなど)不要
型安全性なしあり
戻り値整数(出力した文字数)なし

このように、C++では型安全で書式指定が直感的なcoutを使用するのが一般的です。一方、既存のC言語コードとの互換性が必要な場合や、桁数・小数点以下の表示など細かいフォーマット制御を行いたい場面では、printf()が依然として有効な選択肢となります。用途に応じて使い分けるとよいでしょう。

  1. C++におけるドット演算子(.)とアロー演算子(->)の違いを徹底解説

    C++では、ドット演算子(.)とアロー演算子(->)はどちらもクラスのメンバーにアクセスするために使用されますが、それぞれ使用される場面が異なります。C++において、class、struct、unionとして宣言された型はすべて「クラスタイプ」とみなされるため、以下の説明はこれら3つすべてに当てはまります。基本的な使い分けa.b は、b がオブジェクト a(またはオブジェクトへの参照[1])のメンバーである場合にのみ使用できます。つまり、a.b の形式では、a は常にクラスの実際のオブジェクト(またはその参照)でなければなりません。a->b は、本質的に (*a).b の省略記法で

  2. C++における#defineとconstキーワードの違いとは?

    #defineとconstの基本的な違い#defineディレクティブはプリプロセッサディレクティブです。プリプロセッサは、コンパイラがソースコードを認識する前に、マクロをその定義内容で単純に置き換えます。イメージとしては、ソースコード全体に対して自動的に実行される「検索と置換」のようなものです。const変数の特徴一方、constによる変数宣言は、言語仕様上の実際の変数を宣言するものです。そのため、通常の変数と同じように扱うことができます。具体的には、以下のような操作が可能です。アドレスの取得(ポインタや参照への代入)関数への引数としての受け渡しキャストや型変換パフォーマンスとスコープの違いコ