2010年5月8日土曜日

コンソール上でゆっくりと文字を出力する方法(C言語)

C言語のコンソールで昔のコンピュータ風にゆっくりとメッセージが横に流れる効果を出したいと思ったことは無いでしょうか?

ここでは、簡単に横に流れる効果をコンソール上で実現します。

まず、キーワードになるのがusleep()関数です。 この関数は指定した時間だけ待つという関数です。正確には待つのではなく、眠るの方が適切だと思われます。

次に、一文字ずつ文字列か文字を切り出して表示を行います。 ただし、そのまま出力するとバッファ内部に蓄積されるだけで出力がされません。 これを防ぐために fflush()関数を使います。
この関数は、現在バッファにたまっているデータを全て出力するという関数です。

今回のサンプルではfflush(stdout)と標準出力に対してバッファ内部のデータを出力するように指示しています。


サンプル
#include <unistd.h>
#include <stdio.h>


main(){

const int SLTIME = 50000;
char *str = "Hello world\ntest test\nSlowOutput\n";
char *pt;

pt = str;

while(*pt) {

usleep(SLTIME);
printf("%c",*pt);
fflush(stdout);
pt++;
}

}

ソースファイルは以下からダウンロードできます。

0 件のコメント:

コメントを投稿