22

重複の可能性:
端末で印刷されたメッセージを再印刷せずに更新する方法 (Linux)

C++ コードがあり、いくつかのシミュレーションを実行しています。

シミュレーションのパーセンテージを表示したいのですが、次のように、すべてのステップで新しい行を出力したくありません。

%1

%2

%3

...

C ++またはシェルスクリプトで、新しい行を作成せずに進行状況を表示する方法はありますか?

ありがとう

編集 1

ページ全体を更新せずに個人の Web ページの番号を更新する方法を知っている人はいますか?

ありがとう

編集 2

double N=0;
forAll (internalIDs_, i) {
    N++;
    double percent = 100*N/internalIDs_.size();
    // Info<< "\rProgress: " << percent << "%" << endl;
    printf("\r[%6.4f%%]",percent);}

端末カーソルが数字の間を周期的に点滅し続けます。これは非常に厄介です。これを取り除く方法は?

4

2 に答える 2

25

これに使用されるトリックは、次の行に進むのではなく、現在の行の最初の位置に戻ることです。

これは、\r文字 (キャリッジ リターン) を端末/stdout に書き込むことによって行われます。

于 2012-06-11T15:48:48.593 に答える
18
cout << "\r%1";
cout << "\r%2";
cout << "\r%3";

...

\r - 行頭に移動;

しかし!もしも :

cout << "\rsomelongmessage";
cout << "\rshort";

それからあなたは出ます:

shortongmessage

なぜなら:

somelongmessage
^^^^^
short

でも君ならできる:

cout << "\rsomelongmessage";
cout << "\rshort          ";

その後、最終的に取得します:

short
于 2012-06-11T15:53:58.423 に答える