慢慢出现printf,在C99
Slowly Appears printf, in C99
我想制作一个类似于 printf 的函数,但它使文本显示缓慢,通过使用双 for,一个用于打印 char,一个用于花费时间:
char phrase[30]={"Printf random"};
for(int a=0;a<=30;a++){
printf("%c",phrase[a]);
for(int t=0;t<=1000000;t++){
int f;
f++;
}
}
但是当我运行,一开始,它需要几秒钟(第二个for),然后打印所有的短语。
为什么每次进第一个都不进第二个?
也许一旦程序第一次计算了秒,再次计算它就不需要时间了?我该如何解决?
首先,在你的代码中,通过说
for(int a=0;a<=30;a++){
你差了一个,它调用了 undefined behavior。应该是
for(int a=0;a<30;a++){
也就是说,您需要刷新输出缓冲区才能将缓冲区内容实际发送到相关文件。否则,标准输出实际上是行缓冲的,它不会自动刷新内容。所有的内容都会存储在缓冲区中,当程序快要结束时,所有打开的缓冲区都会被刷新,然后所有的内容就会一起出现。
int f
应该在第二个 for 循环之前。您每次在循环中创建一个新变量 f
并递增新变量。
在你的例子中,它起作用是因为循环中没有其他变量。因此,每次在循环中,变量 f
将在相同的内存位置创建,并具有旧值。
如果您有一个包含多个 if
条件的复杂循环,这可能不起作用。
此外,正如其他人提到的,您需要刷新输出。
我想制作一个类似于 printf 的函数,但它使文本显示缓慢,通过使用双 for,一个用于打印 char,一个用于花费时间:
char phrase[30]={"Printf random"};
for(int a=0;a<=30;a++){
printf("%c",phrase[a]);
for(int t=0;t<=1000000;t++){
int f;
f++;
}
}
但是当我运行,一开始,它需要几秒钟(第二个for),然后打印所有的短语。
为什么每次进第一个都不进第二个? 也许一旦程序第一次计算了秒,再次计算它就不需要时间了?我该如何解决?
首先,在你的代码中,通过说
for(int a=0;a<=30;a++){
你差了一个,它调用了 undefined behavior。应该是
for(int a=0;a<30;a++){
也就是说,您需要刷新输出缓冲区才能将缓冲区内容实际发送到相关文件。否则,标准输出实际上是行缓冲的,它不会自动刷新内容。所有的内容都会存储在缓冲区中,当程序快要结束时,所有打开的缓冲区都会被刷新,然后所有的内容就会一起出现。
int f
应该在第二个 for 循环之前。您每次在循环中创建一个新变量 f
并递增新变量。
在你的例子中,它起作用是因为循环中没有其他变量。因此,每次在循环中,变量 f
将在相同的内存位置创建,并具有旧值。
如果您有一个包含多个 if
条件的复杂循环,这可能不起作用。
此外,正如其他人提到的,您需要刷新输出。