15

coutを使用してタスクの進行状況を更新するタスク監視をコーディングしています。1行に1つのタスクの進行状況を表示したいので、コンソールの複数の行をロールバックする必要があります。

私は「いくつか」を主張します。なぜなら\b、1行の仕事をするのですが、行の間で消去されない\nからです。

試しましたが、-1(失敗)をstd::cout.seekp(std::cout.tellp() - str.length());返しtellp()ます。

4

6 に答える 6

25

現在の行の先頭にジャンプすることもできますがcout << '\r';、上に移動するのはシステム固有です。Unixの場合は、およびを参照man termcapしてくださいman terminfo(およびを検索してくださいcursor_up)。ANSI互換端末(Unixで利用可能な最新の端末など)では、これは上に移動するように機能しますcout << "\e[A";

でシークしようとしないでくださいcout。ほとんどの場合、シークできません(ファイルにリダイレクトされる場合を除く)。

他の回答で述べたように、ncurses(またはslang)ライブラリを使用すると、UnixのターミナルI/Oに優れた抽象化が提供されます。

\rスペースで埋める代わりに(すべての端末の幅が80文字であるとは限らないため、エラーが発生しやすくなります)、 + clr_eol:を実行できますstd::cout << "\r\e[K" << std::flush

于 2010-07-18T20:17:26.983 に答える
8

可能であれば、 ncursesなどの出力フォーマットライブラリを使用してください。これにより、端末の操作が大幅に簡素化されます。

于 2010-07-18T20:15:11.793 に答える
5

CもC++もそのようなものを定義していません。明示的な端末操作が必要です。Unixでは、 cursesを使用できます。Windowsに何があるのか​​わかりません。

于 2010-07-18T20:16:59.950 に答える