• ベストアンサー

coutで出力した文字を消去するためには?

coutで出力した文字を消す方法はないのかと思い質問させていただきました。 繰り返し処理を行うとき、その完了具合を%で表示させようとしています。百分率の数字を0~100まで増加させていく感じで出力させたいのですが、その方法がわからなくて質問しました。 結構、この部分の処理に時間がかかるので、できれば、完了具合を表示できればと思って、このようにしたいと思いました。 C++のプログラミング環境は、LinuxでIntelコンパイラを使っています。 int i; for(i=0; i<繰り返し回数; i++){ [繰り返し処理の内容] } のような感じで処理を行っています。for文の繰り返しの済み具合を表示したいです。 coutで表示した完了の程度を消去して、再度表示して、再度消去するのかと思うのですが、別に、もっとよい方法があれば教えていただきたいと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

一番簡単な方法は、 アスキーコードで8を出力するとカーソルが左に一つ移動します。 そこで、新しい文字やスペース等を出力すると文字が上書きされます。 char bs=8; cout <<"111"<<bs<<bs<<bs<<"000"; とかしてみると納得できると思います。 ちなみに、C/C++であれば、\bでも大丈夫です。 アスキーコードのエスケープシーケンス部分にも結構使えるものはありますよ。

kopanda116
質問者

お礼

試してみました。 実際に、実行できました。 この方法でも可能だとは思いますが、 アスキーコードを中心にもう一度調べなおして見たいと思います。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

コンソール出力で一度表示した文字を消せるかどうかはコンソールに依存します。 Linuxコンソールでは下記のようなコントロールコードを使って操作できるようです。 # http://www.linux.or.jp/JM/html/LDP_man-pages/man4/console_codes.4.html 実際の操作としては、バックスペースで一文字戻るか、キャリッジリターンで行頭に戻る。ただこれらはカーソル移動だけで文字消しはなかったかもしれないので、その場合は空白を出力してもう一度戻る必要があります。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/console_codes.4.html
kopanda116
質問者

お礼

上のURLを拝見しましたが、まだ理解が追いついていなくて、わからない部分も結構ありますが、なんとかなりそうです。 ありがとうございました。

回答No.2

ちょっと変な日本語書きました。 アスキーコードはアスキーコード。 アスキーコードにエスケープコードというのがあって、エスケープコードの後に何か出力させることでいろいろな動作をさせることもできますというのが正確です。 たとえば、文字の色を変えたり、点滅させたりもできますよ。

関連するQ&A