[解決済み] ピュアC/C++(cout/printf)でプログレスインジケータを表示するには?
2023-02-16 12:41:08
質問
C++で、大きなファイルをダウンロードするコンソールプログラムを書いています。私はファイルサイズを知っていて、それをダウンロードするために作業スレッドを開始します。私はそれをよりクールに見せるために進行状況インジケータを表示したい。
coutやprintfで、異なるタイミングで異なる文字列を、同じ位置に表示するにはどうしたらよいでしょうか。
どのように解決するのですか?
出力の幅が固定されている場合、以下のようなものを使用します。
float progress = 0.0;
while (progress < 1.0) {
int barWidth = 70;
std::cout << "[";
int pos = barWidth * progress;
for (int i = 0; i < barWidth; ++i) {
if (i < pos) std::cout << "=";
else if (i == pos) std::cout << ">";
else std::cout << " ";
}
std::cout << "] " << int(progress * 100.0) << " %\r";
std::cout.flush();
progress += 0.16; // for demonstration only
}
std::cout << std::endl;
[> ] 0 %
[===========> ] 15 %
[======================> ] 31 %
[=================================> ] 47 %
[============================================> ] 63 %
[========================================================> ] 80 %
[===================================================================> ] 96 %
なお、この出力は 表示 の一行下に表示されますが、ターミナルエミュレータでは (Windows のコマンドラインでも同様だと思います)、次のように表示されます。 と表示され、同じ行に .
一番最後に、さらに何かを印刷する前に改行を印刷することを忘れないでください。
最後のバーを削除したい場合は、空白で上書きして、例えば次のような短いものを印刷しなければなりません。
"Done."
.
また、もちろん同じことが
printf
を使っても同じことができます。上記のコードを適応させるのは簡単でしょう。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] printf ファミリーを使用して、size_t 変数をポータブルに印刷するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] インテル Sandybridge ファミリー CPU のパイプラインのためのプログラムの最適化解除
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】正気で、安全で、効率的な方法でファイルをコピーする。
-
[解決済み】C++で乱数を生成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++