• ベストアンサー

端末の同じ場所に出力

カウントした数字を表示だけのプログラムでprintf等を使って、 for(i=0;i<10;i++){  printf("%d",i);  sleep(1); } という風な記述をすれば $ ./a.out 0 1 2 3 4 5 ..... という風に表示されますが、そうではなく $ ./a.out 0 *** 1秒後 $ ./a.out 1 *** 2秒後 $ ./a.out 2 以下略   という風に同じ場所に出力したい場合は、(もしそのようなことが可能であれば)どういう方法があるのでしょうか? ms-dos や kterm等の端末で実現したいです。

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

  • ベストアンサー
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.2

termcap,terminfo,ncurses などを使います。 いずれもmanページがあると思いますので調べてみてください。 #1さんの方法は環境依存ですのでおすすめしません。環境による違いを吸収するのがtermcapやterminfoです。ncursesはそれより上位のライブラリで、キャラクタ端末上でウィンドウを表示したりできます。

その他の回答 (3)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.4

#2です。再度失礼します。 #3さんが正解です。 私の紹介したものを使うといろいろできますが、ご質問のケースに限れば#3さんの回答のとおりにされるのがいちばん簡単で良いでしょう。

  • ara_ara
  • ベストアンサー率35% (124/348)
回答No.3

簡単に  printf("%d\r",i); というのもまずいのかな?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

エスケープシーケンスという、制御文字が利用できます。 printf("\x1b[2J") は、ESC[2J(画面消去)になります。 時間はtime関数が使える思います。 あとは、ループで廻すだけ。 http://www1.cts.ne.jp/~clab/hsample/Time/Time3.html

参考URL:
http://hp.vector.co.jp/authors/VA016670/escape_code.html,http://homepage3.nifty.com/peterpan/etescseq-eseq.html

関連するQ&A