土曜日, 6月 01, 2013

C++ - コンソールのプログレス表示

コンソールでプログレスを表示するには

rpmのvオプションをつけた時やyumの出力等で見かける,同じラインで進捗状況を出力する機能.コマンドラインユーティリティを作る際は遅かれ早かれ必要になることも多いはず.個人的には多いのでいちおうメモということで.

ちなみにC++と題してはいるがこの方法は他の言語でも使えるはず.

コード

肝心なポイントは \r(キャリッジリターン)だけを表示すること,そしてバッファをマニュアルでフラッシュすること.少なくともgnu g++のcoutは改行をしないとバッファを標準出力にフラッシュしない.
#include <iostream>
#include <unistd.h>
#include <cstdlib>
using namespace std;

int main() {

    string progress = "progress..";
    cout << "starting.." << endl; 
    for( int i = 0;i < 10;i++ ) {

        progress += "#"; 
        cout << progress << "\r" << flush;
        sleep( 1 );
    }

    cout << endl << "done." << endl;

    return EXIT_SUCCESS;

}

0 件のコメント: