C++入門/出力

プログラムに任せた仕事の結果を何かしら確認する方法がはじめに必要である.ここでは数字を表示する方法を説明する.以下のプログラムをテキストエディタに記載して,保存してもらいたい(4行目はMac OSでないならなくても構わない).

#include <iostream>
int main(){
    std::cout << 2;
    std::cout.flush(); // Mac OS で実行する場合にのみ必要
    return 0;
}

保存した後,g++ によりコンパイルして実行する.p1.cppとして保存しコンパイルから実行まで行った結果を以下に示す.

[shibata@127 C]$ ls # ファイルを確認 p1.cpp [shibata@127 C]$ pwd # 現在階層を確認 /home/shibata/git/cpp/C [shibata@127 C]$ g++ p1.cpp # コードをコンパイル [shibata@127 C]$ ls # ファイルを確認 a.out p1.cpp [shibata@127 C]$ ./a.out # コードを実行 2[shibata@127 C]$

最後の行で2と画面に表示されていることがわかる.もちろんこれではなんの役にも立たない.だが,文法について学ぶためにこれができればだいぶ足しになる.このプログラムにどのような文字を追加した場合に,動作がどのように変わるか確認してみよう.

まず,改行と空白は,もともと改行と空白がある場所にいくら入れてもプログラムの動作に影響を与えない.例えば次のコードは出力される数値が3に変わっていること以外先程のものと全く同じ動作をする.

#include<iostream>

int    main(){

    std::cout <<      3;

    std::cout.flush(); // Mac OS で実行する場合にのみ必要

    return      0;
}

このstd::coutは与えられた数値を画面に出力するという機能を提供する.使い方は,一番左にstd::cout と書いて,その次に <<,数字の順に記載し,最後に ; を記載するというものである.一つのプログラムの中で,この機能std::coutを何度使っても構わない.例えば,つぎのように4回に渡り数値を出力することが可能である.

#include<iostream>

int main(){
    std::cout << 1;
    std::cout << 2;
    std::cout << 3;
    std::cout << 4;
    std::cout.flush(); // Mac OS で実行する場合にのみ必要
    return 0;
}

p2.cpp として保存しコンパイルして実行した結果は次のとおりである.

[shibata@127 C]$ g++ p2.cpp [shibata@127 C]$ ./a.out 1234[shibata@127 C]$

見てわかるとおり,1, 2, 3, 4の4つの数値が出力されているのか,1234という数値が出力されているのかこれでは判別がつかない.以下のように記載すると,改行を行うことができる.

#include<iostream>
int main(){
    std::cout << 1;
    std::cout << char(10);
    std::cout << 2;
    std::cout << char(10);
    std::cout << 3;
    std::cout << char(10);
    std::cout << 4;
    std::cout << char(10);
    std::cout.flush(); // Mac OS 用
    return 0;
}

これを実行すると次のようになる.

[shibata@127 cpp]$ g++ a.cpp [shibata@127 cpp]$ ./a.out 1 2 3 4 [shibata@127 cpp]$

数値の代わりに「char(10)」を出力すると,出力について改行ができるという決まりになっている.これについて詳しくは文字列の頁において説明する.しばらくは,改行ができて見やすくなる,という程度に深く考えず覚えて使えるようになってもらいたい.

記載量が増えてきたため,簡素化の方法を説明する.std::cout は以下のように,2回目以降<<を連続して書くことで省略することができる.「;」もstd::coutの直前以外を省略している.

#include<iostream>
int main(){
    std::cout << 1 << char(10);
    std::cout << 2 << char(10);
    std::cout << 3 << char(10);
    std::cout << 4 << char(10);
    std::cout.flush(); // Mac OS 用
    return 0;
}

更に省略して次のように記載しても良い.2通り示す.コード上で改行があるかどうかは出力の改行に関係がないこともわかる.ただ,意味的な単位ごとに記載したほうがわかりやすいため,上記くらいにとどめておくことを進める.

#include<iostream>
int main(){
    std::cout << 1 << char(10) << 2 << char(10) << 3 << char(10) << 4 << char(10);
    std::cout.flush(); // Mac OS 用
    return 0;
}
#include<iostream>
int main(){
    std::cout << 1 << char(10)
    << 2 << char(10)
    << 3 << char(10)
    << 4 << char(10);
    std::cout.flush(); // Mac OS 用
    return 0;
}

ちなみに,// が記載されている場合,これが記載された行と同じでそれより右側にある文字列は,コンパイル時に無視される.実行コードに影響を与えることはない.これをコメント(日本語で言うところの覚書や注釈,備考だろうか)と言う.適宜利用し,コードの意味をわかりやすいようにしておくとよいだろう.

練習問題

問題1

以下の通り出力せよ.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            

回答

io-ans.cpp