博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++语言出现的bug
阅读量:5824 次
发布时间:2019-06-18

本文共 694 字,大约阅读时间需要 2 分钟。

hot3.png

输出语句不管是C语言的printf();还是cout << "" << endl;

在循环语句中会出现一个bug:

下面是不正常的两种情况:

 

 

下面是正常的:

 

可能的原因:

"\n"表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出"\n"类似,但可能略有区别。

std::endl输出一个换行符,并立即刷新缓冲区。
例如,
std::cout << std::endl;
相当于
std::cout << '\n' << std::flush;,或者
std::cout << '\n'; std::fflush(stdout);。
由于流操作符operator<<的重载,对于'\n'和"\n",输出效果相同。
对于有输出缓冲的流(例如cout、clog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。不过对于cout来说(相对于文件输出流等),缓冲一般体现得并不明显。但是必要情况下使用endl代替'\n'一般是个好习惯。
对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用'\n'。
----
由 于直接输入/输出和操作系统相关,可能需要切换内核态/用户态,需要一定的时间开销,频繁地进行操作会极大地降低输入/输出的效率,所以标准库对流的输入 /输出操作使用缓冲。具体来讲,就是在内存中保存一个大小相对固定的区域(缓冲区)用来储存临时的输入或输出。当必要时,才向系统设备复制缓冲区的内容并 清空缓冲区,这个过程称为刷新。

 
 
 

转载于:https://my.oschina.net/u/2363463/blog/635979

你可能感兴趣的文章
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>