Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

std::coutで出力を上書きする

例えば,ループ処理中に現状の誤差や進行度合いをパーセント表示させたい時がある.これを単純に'''std::cout'''を使って逐次表示させるとコマンドプロンプトに出力が溜まっていき,過去の出力が遥か上方へ追いやられてしまう.こうする代わりに,毎回,表示する文字列を上書きしたい.

f:id:Mugichoko:20181118075242p:plain
つまり,こういうこと.

どこにでも出てくる情報だが,どうもしっくりこない情報も多かったので,自分のメモ用にここに書き留めることにした.

ここが決め手

  • \rを上書きしたい行の最初に入れて,出力の対象を行の先頭に戻すこと
  • 前の出力が現在の出力より長い場合を考慮して,' 'で埋めること
#include <iostream>
#include <string>

int main()
{
    for (int idx = 0; idx < 100000; ++idx)
    {
        std::cout << "\r" << "Loop: #" << idx << std::string(20, ' ');
    }
    std::cout << std::endl;

    std::cin.get();
    return 0;
}