「平成」を感じるもの

C言語にていての質問です.

一度標準出力に出力した文字の上に上書きして出力することは可能でしょうか?
例えば,カウントダウンするとき
「10」を出力したあとに,同じ部分に「半角空白+9」を出力できますか?
printf("10");printf(" 9");では「10 9」になってしまいますよね.

よろしくお願いします.

A 回答 (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つ前の文字が残ってしまう。
    • good
    • 0
この回答へのお礼

細かい点まで教えていただきありがとうございます.
Visual Studioでやったときはできたのですが,Cygwinではできませんでした.カウントダウン中の文字は出力されませんでした.
実行環境がwindows?でないと無理なのでしょうか?

お礼日時:2009/01/30 15:55

>カウントダウン中の文字は出力されませんでした.



printfの後に
fflush(stdout);
を入れてみましょう。

標準出力stdoutは、\n(普通の改行)が来ないと、出力文字をバッファに溜めたまま、すぐには表示しない事があります。

溜めずにすぐに表示するか、バッファに溜めるかどうかは、処理系により異なるので
>Visual Studioでやったときはできたのですが,Cygwinではできませんでした.
って事が起きます。

なお、一番最初に
setbuf(stdout, NULL);
を1回だけ実行しておくと、出力をバッファに溜めなくなりすぐに出力されるようになるのでprintfの後のfflush(stdout);は要らなくなります。
    • good
    • 0
この回答へのお礼

できました.ありがとうございました.

お礼日時:2009/01/30 18:25

標準出力で行頭にカーソル位置を戻すためには


'\r'(キャリッジリターン)を使用します。
int i;
for( i=10; i>=0; i-- )
{
printf( " %d\r", i );
sleep( 10000 );
}
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます.
試してみます.

お礼日時:2009/01/30 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報