我有一个有点愚蠢的问题,因为它应该是完全简单的......
假设我有字符串:
char *str = "stackoverflow";
我想在每个字符之后一次打印该字符串一个字符:
int i = 0;
while (str[i] != '\0') {
putchar(str[i]);
usleep(100000);
i++;
}
但是,不是做明显和正确的事情,打印一个角色并等待100毫秒再重复一遍,看起来延迟会累积并立即吐出。
所以它快乐地睡了大约一秒半,然后打印出我的弦。
任何想法?
(我在Ruby中做了完全相同的事情没有问题,并且还尝试使用'\ r'方法,它也适用于Ruby ...)
请帮忙!
否则我不能为我的作业执行程序,即打印字符串;但我不想这么做......;)
谢谢!
答案 0 :(得分:5)
尝试在两者之间刷新缓冲区:
putchar(str[i]);
fflush(stdout);
usleep(100000);
写入终端时,输出通常是行缓冲的。如果遇到\n
或缓冲区已填满,则会打印实际内容。
或者你可以在开头一劳永逸地禁用缓冲:
setbuf(stdout, NULL);
答案 1 :(得分:0)
这不是延迟累积并立即吐出,而是字符串(请注意,当您执行程序时,延迟出现在字符串打印之前,而不是之后)。
在每个char之后刷新标准输出:
fflush(stdout);
答案 2 :(得分:0)
您需要致电fflush()
。角色正在缓冲。