ROOT
ROOT

cout 与 printf 混用的问题

前几天做一道题目的时候因为混用了 iostream 和 stdio 导致一直 WA 而查不出来。。

今天看了一下课件发现 cout 与 printf 混用会导致输出顺序问题。。

下面做个实验。。

int main()
{
	cout << "Net";
	printf("Can\n");
	return 0;
}

输出

NetCan

没问题。我上次为了加快 cin/cout 速度,关闭了同步 stdio 导致出错,现在试试

int main()
{
	ios::sync_with_stdio(false); // 关闭同步
	cout << "Net";
	printf("Can\n");
	return 0;
}

输出

Can
Net

顺序发生了变化。。

sync_with_stdio() 是在 <ios_base> 中定义的,当其接受 true 作为参数时,将会同步 iostream 与 stdio 中的流操作。默认是 true,因此第一个程序的结果是正确的。然而,尽管 C++ 标准中规定 stdio sync 标志默认是 true,不同平台下的不同编译器可能并不完全支持这个标准。

下面改一下,

int main()
{
	ios::sync_with_stdio(false);
	cout << "Net" << flush;
	printf("Can\n");
	return 0;
}

输出结果正确。

因为 flush 强制清空了缓冲区,将其中的内容输出。

支持一下
扫一扫,支持Netcan
  • 微信扫一扫
  • 支付宝扫一扫