写程序过程中遇到的奇怪问题:
在重复输出的情况下,cout刚开始输出正常,之后输出产生异常结果,而printf一直输出正常
为什么呢?
GetLocalTime(sys);//获取系统日期和时间
cout << "time:" << setw(2) << setfill('0') << (*sys).wHour << ":" << setw(2) << setfill('0') << (*sys).wMinute << ":" << setw(2) << setfill('0') << (*sys).wSecond << endl; //时间打印(此语句持续输出产生异常结果,更换为printf)
printf("%d-%d-%d %02d:%02d:%02d:%03d\n", (*sys).wYear, (*sys).wMonth, (*sys).wDay, (*sys).wHour, (*sys).wMinute, (*sys).wSecond, (*sys).wMilliseconds);
不可能吧,你加个断点看下??
cout在输出时总是要先将输出的存入缓存区。而printf直接调用系统进行IO,它是非缓存的。所以cout比printf慢。
默认情况,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin/cout有许多额外的开销,使得其大量输入/输出会出现超时问题。
不知道是否是题主为了解决cout输出消耗,添加了以下语句呢:
ios::sync_with_stdio(false);//关闭c++兼容c的特性
cin.tie(0);//加速cin
cout.tie(0);//加速cout
该语句取消cin与stdin(cout与stdout)的同步了,此时的cout就与printf输出速度差不多 ,但可能会导致cout输出的指针混乱。估计问题中的错误是由此引起的吧。
printf 稳定性强吧