- ベストアンサー
1行の文字列を時間差で表示する方法
こんにちはorこんばんは。 学校でC言語を習っています。 質問なんですが以下のプログラムで1行で表示する文字を時間差で表示させたいのですがどうしたらいいんでしょうか?理想としては 「犯人は・・・(数秒後)お前だ!」 ←これを改行せずに1行で。 と表現したいんですが、最初に int main(void) { printf("犯人は・・・"); sleep(2); printf("お前だ!\n"); return 0; } と書いたのですが、思い通りにいかず、数秒たってから一度に表示しました。 C言語を使っている環境はLinux4.2でemacsで書いています。 どなたか方法をご存じの方がいれば教えてください。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「Linux4.2」ってなんだ. そんなものはないぞ. さておき, stdin がデフォルトでラインバッファリングになっているんでしょう. つまり「バッファからあふれそうになるか 1行が終わるたびに出力する」という仕様になっている. だから fflush するか setbuf ないし setvbuf でバッファリングを止めるかすればいいはず. ちなみにたぶん putchar では効果ないと思う>#2.
その他の回答 (2)
- ricardo_
- ベストアンサー率19% (14/72)
バッファに文字を蓄えておき、エンターキーに相当する¥nで一度に表示する仕様なのかな。 putchar() を使ってみたらどうですか。 ポインターを使いputchar(*p++) とタイマーの組み合わせで上手く行けば、 「犯人は・・・(数秒後)お前だ!」 全体をゆっくり表示できます。
お礼
回答ありがとうございます。 自分の勉強不足でポインタのイメージがつかめず上手くできませんでした。 今後のC言語勉強に役立てたいと思います。 ありがとうございました。
- f-tomohiko
- ベストアンサー率50% (11/22)
Linuxでのプログラミングは経験ないんですがfflush()は gcc には 無いんでしょうか。?
お礼
回答ありがとうございます。 fflush()関数のことをしらべて、sleep()の1つ上に組み込んだところ 数秒後に改行することなく表示してくれました。
お礼
回答ありがとうございます。 fflush()関数のおかげで思い通りの結果が出せました。 「Linux4.2」て言うのは「Vine Linux 4.2」ていうつもりで書きました。 間違えてたらすいません。