C++の入出力,入門

目次

  1. ストリーム出力
  2. ストリーム入力
  3. 出力の書式指定

はじめに

C言語は大変歴史があるプログラミング言語のひとつであり,現在も継続的に改良が続けられている.
しかし,「純粋な」C言語の文法だけでは,やや力不足,不便なので,C++ではさまざまな改良が加えられている.
ここでは,C++での入出力について簡単に例示する.

ストリーム出力

C++では,画面出力やキーボード入力(さらにはファイル入出力)にたいして,ストリームという概念が導入されている.

定番,まずはC++版の Hello World プログラムのソースコードを眺めてみよう.

#include <iostream>
using namespace std;
    
int main(void)
{
    cout << "Hello World!" << endl;      // これがprintf()に相当
    return 0;
}

おなじみの C 言語版 Hello World との相違点は

いろいろなストリーム出力例
#include <iostream>
#include <cstdio>       // Cのstdio.hに相当するヘッダファイル,C++用

using namespace std;

int main(void)
{
    //  文字列定数の出力
    cout << "Hello World!" << endl;

    //  整数変数
    int i = 100;
    cout << "i = " << i << endl;

    printf("i = %d --- by printf()\n", i);    //  もちろんprintf()もOK.

    //  実数変数
    double r = 3.1415;
    cout << "r = " << r << endl;

    return 0;
}

このように,ストリーム出力では,出力したい変数や文字列を,順次 << で並べて記述すればよく,数値や文字列など型を気にせずに出力することができる.
逆に,表示桁数や表記法を細かく指定して出力するには printf のほうが便利な場合もある.(C++の書式の指定は後述)

ストリーム入力

C++では,キーボードからの入力についても,ストリーム機能を用いて簡単に記述できる.
C言語では scanf() を使用してきたが,C++では「ストリーム入力」を使用する.

ソースコード中では,出力とは逆向きの記号 >> 記号を用いる.
この際,書式指定は不要で,入力された文字や数値は自動的にその変数型に変換され,格納される.

ストリーム機能によるキーボード入力の例
#include <iostream>
using namespace std;

int main(void)
{
    int i;
    cout << "i = ? ";
    cin >> i;
    cout << "入力された i = " << i << endl;

    double r;
    cout << "r = ? ";
    cin >> r;
    cout << "入力された r = " << r << endl;

    return 0;
}

出力の書式指定

coutを用いたストリーム出力では,変数の型を気にすることなく画面に数値や文字列を表示できるが,有効桁など書式を制御したい場合が多い.
coutを使用した出力においても,表示する数値全体の「桁数」や,小数点以下の表示「桁数」,16進数表示など,printf と同様,書式を指定することができる.
書式指定には,マニピュレータ機能 iomanip で定義されている関数群 setw(), setprecision(), setfill() を用いる.

注:以下のコード例の通り,必ずしも便利というわけでない.
printf()を使用した方が簡潔な場合もある.

整数の書式指定例
#include <iostream>
#include <iomanip>       // マニピュレータ 用
using namespace std;

int main(void)
{
    int i = 100;
    cout << "i      = " << i << endl;           // 標準では10進数
    cout << "i(hex) = " << hex << i << endl;   // 16進数
    cout << "i(oct) = " << oct << i << endl;   //  8進数
    cout << "i(dec) = " << dec << i << endl;   // 10進数

    cout << "i = " << setw(10) << i << endl;                      //  出力幅を設定
    cout << "i = " << setw(10) << setfill('0') << i << endl;     //  出力幅と空白を埋める文字を設定

    return 0;
}
実数の書式指定の例
#include <iostream>
#include <iomanip>       // マニピュレータ 用
using namespace std;

int main(void)
{
    double pi = 3.14159265358979;
    cout << "pi = " << pi << endl;
    cout << "pi = " << setw(20) << pi << endl;                      //  数値の表示幅を指定   "%20lf" と同じ
    cout << "pi = " << setprecision(15)  << pi << endl;             //  小数点以下の桁数を指定  "%.15lf" と同じ
    cout << "pi = " << setw(20) << setprecision(15) << pi << endl;      // 両方指定 "%20.15lf" と同じ
    cout << "pi(scientific) = " << scientific << setw(20) << setprecision(15) << pi << endl;   // 指数形式

    return 0;
}