C++语言出现的bug

输出语句不管是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'。
----
由 于直接输入/输出和操作系统相关,可能需要切换内核态/用户态,需要一定的时间开销,频繁地进行操作会极大地降低输入/输出的效率,所以标准库对流的输入 /输出操作使用缓冲。具体来讲,就是在内存中保存一个大小相对固定的区域(缓冲区)用来储存临时的输入或输出。当必要时,才向系统设备复制缓冲区的内容并 清空缓冲区,这个过程称为刷新。

时间: 2024-10-24 17:18:14

C++语言出现的bug的相关文章

你知道怎样写一份良好的缺陷(Bug)报告吗?

是的,任何一款软件中都会存在bug,甚至就连是我们自己也存在着缺陷,因为程序员也不过是普通人,而只要是人就会犯错误的.当有人在使用软件的时候遇到软件bug,你需要的使用你的邮件形成一份缺陷bug,然后发送给开发人员.而开发者可以依据这份报告来定位问题,复现问题,从而修复问题. 但是在很多时候,开发人员反而很难理解用户提交上的缺陷报告,那是因为发送人并不了解我们需要的是什么,那应该怎样和开发人员沟通,还有应该如何写出一份缺陷报告,在我写的这篇文章中,我将会来教你怎样去写一份清晰的缺陷报告才能够让开

如何写一份良好的缺陷(Bug)报告

没错,任何软件都存在bug,哪怕是我们自己也存在缺陷,因为程序员也是普通人,人是会犯错误的.当有人在使用软件时遇到bug,你需要使用邮件形成一份缺陷bug,发送给开发人员.开发者可以依据该报告定位问题,复现问题,修复问题. 但是很多时候,开发人员很难理解提交上的缺陷报告,因为发送人并不了解我们需要的是什么,那如何与开发人员沟通以及如何写出一份缺陷报告,在这篇文章,我将教你如何写出一份清晰的缺陷报告能使开发者理解.复现.修复问题,这里下载缺陷报告模板. 为什么要发送缺陷报告 缺陷报告可以用很多方式

浅谈JavaScript中的作用域和闭包问题_基础知识

JavaScript的作用域以函数为界,不同的函数拥有相对独立的作用域.函数内部可以声明和访问全局变量,也可以声明局部变量(使用var关键字,函数的参数也是局部变量),但函数外部无法访问内部的局部变量: function test() { var a = 0; // 局部变量 b = 1; // 全局变量 } a = ?, b = ? // a为undefined,b为1 同名的局部变量会覆盖全局变量,但本质上它们是两个独立的变量,一方发生变化不会影响另一方: a = 5; // 函数外a的值为

最令程序员沮丧的十件事

软件开发是一个伟大的工作--和任何其他工作一样,它也有它的缺点.下面的10件事就是大多数程序员关于编程所无法苟同的. 对于非软件开发人员来说,开发人员的工作看起来一定很甜蜜:很多公司都需求这方面人才,得到的报酬真的很不错,公司给你各种有趣的福利,等等.但是真相却是,虽然,这一切是真的,但如同任何其他的工作一样,程序员也有那些扒拉着头发恨不得拔光的时刻.在软件工程师的一生中,有许多事情可能会让他或她沮丧不已. 基于在线讨论论坛中程序员的评论和投票,我们总结了最令软件开发人员沮丧的10件事情.如果,

简直抓狂,最能够把IT人逼疯的8件事

在外行看来,IT行业简直就是"高大上"的代名词,而且在IT公司工作也是一件非常值得骄傲的事情,获得的报酬很高还有各种福利.事实虽然如此,但是大家往往只看到了IT行业风光的一面,没有看到IT男越来原高的发际线和越来越臃肿的啤酒肚,在IT行业总有各种事情能够把你逼疯,所以在这个行业不仅仅需要比较高的智商,还需要强大的心理素质和抗压能力,不然产品经理一天之内改三遍需求,可能你就要抄家伙和他拼命了.本文就分享了论坛上大家评选出的最能把IT人逼疯的8件事. 整天坐着 除非你有带跑步机的办公桌,否

Swift的函数式编程详解_Swift

Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. Swift 概览 对编程语言有了一些经验的程序员,尤其是那些对多种不同类型的编程语言都有经验的开发者, 在学习新的语言的时候更加得心应手.原因在于编程语言本身也是有各种范式的, 把握住这些特点就可以比较容易的上手了. 在入手一门新的语言的时候,一般关注的内容有: 1.原生数据结构 2.运算符 3.分支控

在JavaScript中typeof的用途介绍_基础知识

JavaScript 中的 typeof 其实非常复杂,它可以用来做很多事情,但同时也有很多怪异的表现. 本文列举出了它的多个用法,而且还指出了存在的问题以及解决办法. 阅读本文的前提是,你现在应该已经知道原始值和对象值的区别了. 检查一个变量是否存在,是否有值typeof在两种情况下会返回 "undefined": 1.变量没有被声明 2.变量的值是 undefined 例如: 复制代码 代码如下: > typeof undeclaredVariable === "u

追问页面提交怎么提交不上去

问题描述 returnMethod(1)了已经.下面的哪里不对啊! 解决方案 解决方案二:没看出你这段代码哪里是提交的--解决方案三:你可以在上级页面的ShowAgain......函数里边设置一个断点,在运行时由vs捕获中断,调试参数.贴出调试画面来,不要随便丢个源代码出来.解决方案四:javascript是个比较低级的动态语言,许多bug都不会报错而是继续带病运行.所以你需要比c#更加小心3倍地去测试(以及付出更多时间去调试).不要用什么低级的Alert(....)方法,这种方法太挫了.甚至

程序员这一生,避免不了的让你抓狂沮丧的10件事

简评:软件开发是一个伟大的工作--和任何其他工作一样,它也有它的缺点.对于非软件开发人员来说,开发人员的工作看起来一定很甜蜜:很多公司都需求这方面人才,得到的报酬真的很不错,公司给你各种有趣的福利.但是真相却是,如同任何其他的工作一样,程序员也有那些扒拉着头发恨不得拔光的时刻.在软件工程师的一生中,有许多事情可能会让他或她沮丧不已.其实一个最典型的例子就是怎么努力地向别人解释"我不是修电脑的"!!! 10.硬件 软件,如果没有硬件供其运行的话,自然无法做任何事情.尽管一些软件开发人员在