Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ setbuf()会影响cout吗?_C++_Class Library - Fatal编程技术网

C++ setbuf()会影响cout吗?

C++ setbuf()会影响cout吗?,c++,class-library,C++,Class Library,再一次,我的老师无法回答我的问题。我知道谁能 P>所以,我从来没有真正在C++中学习过C.,我很显然会一直使用CUT语句。在最近的一次作业中,我的老师告诉我们要确保 setbuf( stdout , NULL ); 在main()的顶部,以获得无缓冲的输出,从而使我们能够正确地查看输出 我的问题是:这个语句会影响cout语句,还是仅仅影响我调用的printf()语句 提前谢谢 默认情况下,iostreams和stdio是同步的 不过,这并不意味着手动调整stdio缓冲是个好主意!您可能希望使

再一次,我的老师无法回答我的问题。我知道谁能

<> P>所以,我从来没有真正在C++中学习过C.,我很显然会一直使用CUT语句。在最近的一次作业中,我的老师告诉我们要确保

setbuf( stdout , NULL );
在main()的顶部,以获得无缓冲的输出,从而使我们能够正确地查看输出

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


提前谢谢

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

不过,这并不意味着手动调整stdio缓冲是个好主意!您可能希望使用
std::endl
std::flush
(来自
),这可能会对您有所帮助。e、 g

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

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

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


另一个可能有趣的功能是。

通常,当需要立即查看输出时,我们讨论的是复杂的、高度可靠的财务例行程序,必须在将交易发送给交易对手之前,将交易记录到硬盘。或者,(更常见的情况)我们希望在程序崩溃时看到调试消息

既然你在学习,我就假设你在处理第二个案子。在这种情况下,我的建议是使用stderr而不是stdout。默认情况下,它是无缓冲的,您可以将它与标准输出分开重定向,将输出放在一个位置,将日志放在另一个位置

std::cout << "Hello, world!\n" << std::flush;
// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);