すべての文字にSleep()を使用せずに入力するように、一度に1文字ずつテキストを出力するにはどうすればよいですか?
3 に答える
CPU サイクルを無駄にしないため、スリープが最適なオプションです。
もう 1 つのオプションはビジー待機です。つまり、常に NoOps を実行してスピンします。まったく何もしないループ構造でそれを行うことができます。これが何のためにあるのかはわかりませんが、キャラクター間の待ち時間をランダム化して、自然な感じにすることもできそうです.
スリープは、あなたが説明していることを実行するための最良の方法です.代わりに、ビジーな待機はCPUサイクルを浪費するだけです. コメントから、ループを使用する代わりに、スリープコールで印刷したいすべての文字を手動でハードコーディングしようとしているようです...
これが宿題であるという兆候が 20 分以内にないため、このコードを投稿することにしました。Windows を使用している場合は、Xマイクロ秒の間スリープするusleep
fromを使用します。<unistd.h>
Sleep()
#include <stdio.h>
#include <unistd.h>
void type_text(char *s, unsigned ms_delay)
{
unsigned usecs = ms_delay * 1000; /* 1000 microseconds per ms */
for (; *s; s++) {
putchar(*s);
fflush(stdout); /* alternatively, do once: setbuf(stdout, NULL); */
usleep(usecs);
}
}
int main(void)
{
type_text("hello world\n", 100);
return 0;
}
はバッファリングされるためstdout
、各文字を出力した後にフラッシュするか ( fflush(stdout)
)、1 回実行して出力をまったくバッファリングしないように設定する必要がありますsetbuf(stdout, NULL)
。
上記のコードは"hello world\n"
、各文字間で 100 ミリ秒の遅延で出力されます。非常に基本的な。