#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void delay(double sec)
{
clock_t start = clock();
while ((clock() - start) / CLOCKS_PER_SEC < sec)
;
}
int main()
{
for (int i = 0; i < 100000; i++) {
printf("%d ", i);
delay(1);
}
return 0;
}
我编写了一个延迟函数并使用此代码对其进行了测试,但我没有在标准输出中看到任何数字。
然后我改变了printf()调用:
printf("%d \n", i);
有趣的是,它奏效了。我也试过没有延迟的功能:
for (int i = 0; i < 100000; i++)
printf("%d ", i);
它也有效。我在这里错过了什么?为什么我在运行第一个代码时看不到任何数字?谢谢你的帮助:)
答案 0 :(得分:1)
因为输出是缓冲的。大多数终端将缓冲标准输出,直到遇到换行符(\n
)或调用fflush(stdout)
为止。
包含对delay
的调用的循环最终应打印数字,但程序完成后。
在fflush(stdout);
之后添加printf
- 调用以使数字立即显示而不会在其间插入新行。
答案 1 :(得分:1)
嗯,有两个原因。首先,printf()
并不总是刷新其输出,因此您实际上可能会超过printf
语句,但仍然没有在终端上看到任何内容。文本被缓冲。放入\n
可能会导致它刷新输出,这就是为什么会有效。
第二个问题是您没有将任何值传递给delay()
函数。所以它可能使用了一些随机值,然后悬挂。
我还想指出clock()
会返回CPU时间,而不是“挂钟”时间,所以实际上可能需要的时间比你想象的要长。
延迟函数很棘手,这就是为什么有很多系统调用来执行它们。请参阅sleep()
。