2

ローディングバーをアニメーション化しようとしています。

以下を実行することにより、Windowsで完全に正常に動作します。

    for(int j=0; j<currentSize; ++j)
      cout<<static_cast<char>(219);
    for(int k=maxSize; k>=currentSize; k--)
      cout<<static_cast<char>(177);
    ...
    for(int l = 0; l<maxBarSize; l++){
      cout<<'\b';

しかし、UNIX で試してみると、backspace コマンドが機能しません。何も削除または印刷しません。'^H'の代わりに使用してみました'\b'

UNIX で出力コンソール行を消去することはできませんか?

4

2 に答える 2

3

印刷\bするか、^hそれを行います。これらの文字を「印刷」します。これは、TTY プログラムがキーボード入力としてのそれらに応答して行う「逆削除」操作を実行しません。それらは目に見える文字ではないため、出力に表示されません。カーソル位置を変更します。印刷した場合:

Hello, World!\b\b\b\b\b\bEarth!

出力をファイルに送信すると、これらすべての文字が表示されます。しかし、端末では次のようになります。

Hello, Earth!

世界!" 文字はまだそこにあり、「Earth!」で上書きされているだけです。

于 2013-06-01T19:55:50.210 に答える
3

[backspace]、、[space]を印刷してみました[backspace]か? これにより、消去しようとしている文字の上にスペースが出力されます。

それが機能しない場合、問題はコードではなく、端末エミュレーター (xterm など) にあると思われます。バックスペースなどをサポートするものと、サポートしないものがあります (構成可能なものもあります)。

麻生、エラザールがコールについてコメントcout.flush()した。stdoutこれは、ほとんどの場合、ライン バッファリングされているためです。つまり、ライブラリは、改行が検出されるstdoutまで、書き込まれたすべてのデータをバッファリングします。改行が検出された時点で、バッファは実際のファイル記述子にフラッシュされます。を呼び出すflush()ことにより、出力バッファを強制的にファイル (TTY) に即座に書き込むことになります。

于 2013-06-01T19:52:56.137 に答える