- ベストアンサー
標準出力の上書き
C言語にていての質問です. 一度標準出力に出力した文字の上に上書きして出力することは可能でしょうか? 例えば,カウントダウンするとき 「10」を出力したあとに,同じ部分に「半角空白+9」を出力できますか? printf("10");printf(" 9");では「10 9」になってしまいますよね. よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>printf( " %d\r", i ); ではなく printf( "%d \r", i ); でなければならない。 カウントダウンし _10 の上に _9 を上書きすると _90 になってしまう( _ は空白の意味) なので、\rの前に空白を1つ入れて 10_ の上に 9_ を上書きするようにしないと 9__ になってくれない。 「桁が減った時に、画面上に残ってる前の数字が消えるように、数字の次に空白を入れる」のを忘れないように。 例えば 1.02 1.01 1 0.99 0.98 0.97 の、1.01から1になる時のように、一気に3文字も短くなる場合は 1.02___ 1.01___ 1___ 0.99___ 0.98___ 0.97___ と言う感じで、末尾に3個の空白を入れないと、1つ前の文字が残ってしまう。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
>カウントダウン中の文字は出力されませんでした. printfの後に fflush(stdout); を入れてみましょう。 標準出力stdoutは、\n(普通の改行)が来ないと、出力文字をバッファに溜めたまま、すぐには表示しない事があります。 溜めずにすぐに表示するか、バッファに溜めるかどうかは、処理系により異なるので >Visual Studioでやったときはできたのですが,Cygwinではできませんでした. って事が起きます。 なお、一番最初に setbuf(stdout, NULL); を1回だけ実行しておくと、出力をバッファに溜めなくなりすぐに出力されるようになるのでprintfの後のfflush(stdout);は要らなくなります。
お礼
できました.ありがとうございました.
- aris-wiz
- ベストアンサー率38% (96/252)
標準出力で行頭にカーソル位置を戻すためには '\r'(キャリッジリターン)を使用します。 int i; for( i=10; i>=0; i-- ) { printf( " %d\r", i ); sleep( 10000 ); }
お礼
早速の回答ありがとうございます. 試してみます.
お礼
細かい点まで教えていただきありがとうございます. Visual Studioでやったときはできたのですが,Cygwinではできませんでした.カウントダウン中の文字は出力されませんでした. 実行環境がwindows?でないと無理なのでしょうか?