1

だから私はそれが何かを書いてそれを上書きするコードの一部を作ろうとしています。このような:

10 seconds have passed
11 seconds have passed
12 seconds have passed

新しい行を使用せずに印刷します。だから私はこのようなものを使いたくありません:

std::cout<<"10 seconds have passed\n"
std::cout<<"11 seconds have passed\n"

どうすればよいですか?KubuntuLinuxを実行しています

4

5 に答える 5

9

これが、キャリッジリターン文字の目的です\r。これは、タイピストが行の先頭から入力を続行できるように、紙のキャリッジを右に戻すタイプライターのメカニズムにちなんで名付けられました。これを試して:

std::cout << "10 seconds have passed";
std::cout << "\r11";

もちろん、2つの間に遅延がない場合(おそらくI / Oを待機している場合を除く)、変更が表示される可能性は低くなりますが、少なくとも出力11 seconds have passed10どこにも表示されないように表示されます。

キャリッジリターンの表示方法は、出力するものに完全に依存しますが、これはその意図です。より複雑なクロスプラットフォーム端末出力については、ncursesを参照してください。

于 2012-11-26T20:25:36.310 に答える
4
#include <conio.h>
#include <consoleapi.h>

void gotoxy(short x, short y)       
{ 
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = { x, y };

    SetConsoleCursorPosition(hStdout, position);
}

コンソールでの移動を改善する必要がある場合。(なぜそれが正しく表示されないのかわかりません#include conio.h

于 2012-11-26T20:39:31.547 に答える
1

試す

cout<<"\roverride"

最後に改行なし。\ rは、行の先頭にジャンプすることを意味するcaragereturnを意味します。

于 2012-11-26T20:25:19.040 に答える
1

さらに\r(行の先頭に戻る)、キャラクターを使用して\b1つのキャラクターを取り戻すこともできます。より複雑な作業を行う必要がある場合は、VT100エスケープコードまたはライブラリ(ncursesなど)を使用する必要があります。

于 2012-11-26T20:26:05.713 に答える
1

キャリッジリターン'\r'は、行の先頭に戻る責任があります。

表示時に自動的に削除されないため、書き込まれたすべての文字を上書きする必要があるわけではありません。

また、std :: coutのフラッシュを呼び出すことを忘れないでください。そうしないと、UNIXマシンでは、フラッシュされるまで結果が表示されない可能性があります。

于 2012-11-26T20:27:08.723 に答える