プロが教える店舗&オフィスのセキュリティ対策術

こんにちはorこんばんは。
学校でC言語を習っています。
質問なんですが以下のプログラムで1行で表示する文字を時間差で表示させたいのですがどうしたらいいんでしょうか?理想としては
「犯人は・・・(数秒後)お前だ!」 ←これを改行せずに1行で。
と表現したいんですが、最初に
int main(void)
{
 printf("犯人は・・・");
 sleep(2);
printf("お前だ!\n");
return 0;
}
と書いたのですが、思い通りにいかず、数秒たってから一度に表示しました。
C言語を使っている環境はLinux4.2でemacsで書いています。
どなたか方法をご存じの方がいれば教えてください。
お願いします。

A 回答 (3件)

「Linux4.2」ってなんだ. そんなものはないぞ.


さておき, stdin がデフォルトでラインバッファリングになっているんでしょう. つまり「バッファからあふれそうになるか 1行が終わるたびに出力する」という仕様になっている.
だから fflush するか setbuf ないし setvbuf でバッファリングを止めるかすればいいはず.
ちなみにたぶん putchar では効果ないと思う>#2.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
fflush()関数のおかげで思い通りの結果が出せました。
「Linux4.2」て言うのは「Vine Linux 4.2」ていうつもりで書きました。
間違えてたらすいません。

お礼日時:2009/11/08 22:49

 バッファに文字を蓄えておき、エンターキーに相当する¥nで一度に表示する仕様なのかな。



 putchar() を使ってみたらどうですか。
 ポインターを使いputchar(*p++) とタイマーの組み合わせで上手く行けば、
「犯人は・・・(数秒後)お前だ!」 全体をゆっくり表示できます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分の勉強不足でポインタのイメージがつかめず上手くできませんでした。
今後のC言語勉強に役立てたいと思います。
ありがとうございました。

お礼日時:2009/11/08 22:43

 Linuxでのプログラミングは経験ないんですがfflush()は gcc には


無いんでしょうか。?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
fflush()関数のことをしらべて、sleep()の1つ上に組み込んだところ
数秒後に改行することなく表示してくれました。

お礼日時:2009/11/08 22:37

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