gpt4 book ai didi

c - 使用 sleep() 时 C 语言中 puts() 和 printf() 的区别

转载 作者:太空狗 更新时间:2023-10-29 17:16:09 26 4
gpt4 key购买 nike

我想知道在使用 sleep() 函数时 puts() 和 printf() 函数之间的区别。

这是我的代码(C语言):

printf("hello, world");
sleep(1);
printf("Good, bye!");

程序编译运行后,似乎会先休眠,然后打印“hello, worldGood, bye!”

但是,如果使用 puts() 而不是 printf(),它将打印“hello, world”然后 sleep ,最后打印“Good,bye”。

puts("hello, world");
sleep(1);
puts("Good, bye!);

最佳答案

这是因为缓冲 - 默认情况下,标准输出缓冲到每一行。 printf() 不包含换行符,因此不会刷新输出。 puts() 包含一个换行符,因此输出会被刷新。

您可以通过放置一个换行符来使 printf() 刷新:

printf("hello, world\n");

或者直接调用fflush():

fflush(stdout);

有关缓冲的更多信息,请参阅 setbuf() 的手册页:

The three types of buffering available are unbuffered, block buffered, and
line buffered. When an output stream is unbuffered, information appears on
the destination file or terminal as soon as written; when it is block
buffered many characters are saved up and written as a block; when it
is line buffered characters are saved up until a newline is output or input
is read from any stream attached to a terminal device (typically stdin).
....
If a stream refers to a terminal (as stdout normally does) it is
line buffered.
....
The standard error stream stderr is always unbuffered by default.

关于c - 使用 sleep() 时 C 语言中 puts() 和 printf() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com