逍遥游

为什么程序没有输出或者输出延迟

寒假的时候我们一群人在一个培训机构学着做C语言的项目,有天一个同学拿了一段代码来问我,说是程序输出有问题,检查了很多遍也没有查出原因。

顺手拿过电脑,检查起了代码,程序也很简单,就是通过从tcp协议从另一台主机上获得数据然后输出,代码基本没问题。但是奇怪的是,执行的时候没有输出,然后获取下一条数据的时候才将上一条显示出来。很纳闷,从来没有见过这种问题,调试了很多遍,很肯定,数据是立即获取到了的,原因就在于没有输出来。几个人看了半天,后来某大神加了“\n”,问题竟然神奇的解决了!解决了!

晚上睡觉的时候一直在想这个问题,然后就突然想到了C++里的endl,记得学的时候一个同学问了老师这个,我正好听到了,是跟缓冲区有关的。查了查资料,差不多就是这方面的问题,数据存在于缓冲区,当缓冲区未满的时候就不会输出(也不完全是这样),除非强制刷新。以前一直没有遇到这种问题在于我习惯性地在每条输出语句后加上换行符,而这换行符默认地执行了刷新流的作用,习惯决定命运啊,哈哈哈^-^。

言归正传,如果编程时碰到没有输出的情况,可以看看是不是没有刷新流,办法就是加上换行符。但是没有输出的原因是多种多样的,我所提的只是比较容易被忽略的一种。

把自己平时编程碰到的一些问题以及解决方案发布出来,作为学习笔记,同时也希望碰到类似问题的人能很快地找到症结所在,节约宝贵的时间。


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com