当前位置:  开发笔记 > 编程语言 > 正文

setbuf()会影响cout吗?

如何解决《setbuf()会影响cout吗?》经验,为你挑选了2个好方法。

然而,我的老师再也无法回答我的问题了.我知道谁可能......

所以,我从来没有真正学过C.在C++中,我显然会一直使用cout语句.在最近的任务中,我的老师告诉我们要确保放

setbuf( stdout , NULL );

在main()的顶部,以获得无缓冲的输出,从而允许我们正确地看到输出.

我的问题是:这个语句会影响一个cout语句,还是只调用我调用的printf()语句?

提前致谢!



1> Chris Jester..:

默认情况下,iostreams和stdio是同步的.参考.

但这并不意味着手动调整stdio缓冲是一个好主意!您可能希望使用std::endlstd::flush(来自),这可能会对您有所帮助.例如,

std::cout << "Hello, world!" << std::endl;

要么

std::cout << "Hello, world!\n" << std::flush;

这两个都做同样的事情.(std::endl=打印结束,然后刷新.)



2> Greg Rogers..:

默认情况下,如果stdout或cout正在打印到控制台,则输出是行缓冲的.这意味着每个打印的换行符都会刷新输出.您可以在想要覆盖行为时显式调用flush(),以防万一,输出将被重定向到文件,并且您希望使用tail -f并实时需要某些输出.

正如Chris所说,sync_with_stdio应该将无缓冲的stdout与无缓冲的cout绑定(默认情况下),但如果你所做的只是使用cout,而不是在stdout上使用setbuf,更好的选择是在rdbuf返回的指针上使用pubsetbuf.即:

// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);

可能有趣的另一个功能是领带.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有