文件读写-说endl

25 篇文章 2 订阅

说endl

打印语句常常在调试程序时被添加,而这类语句应当保证“一直”刷新流
———————————Stanley B.Lippman——————————

在输出语句后添加endl成为一种习惯,常常只是当作回车-换行符使用

然而在多次打开同一文件读写的时候,在流输出语句后跟上endl,对保证文件内容顺序符合预期是至关重要的


  • 看下面一段代码:
ofstream outA;
ofstream outB;
/*以追加模式打开t.t*/
outA.open(“t.t”,ofstream::app);
outB.open(“t.t”,ofstream::app);
forint i=0;i< 3;i++{
	outA<<“pfd”;
	outB<<“PFD”;
}

两个文件流轮番向文件t.t写入字符串,结果文件的内容是这样的:

PFDPFDPFDpfdpfdpfd

自成一派,有点意外,本来是轮番写入的,结果内容却没有如预期"交叉".


  • 改一下代码:
ofstream outA;
ofstream outB;
outA.open(“t.t”,ofstream::app);
outB.open(“t.t”,ofstream::app);
forint i=0;i< 3;i++{
	/*每次写都刷新流*/
	outA<<“pfd”<<endl;
	outB<<“PFD”<<endl;
}
  • 在每一条输出语句后面跟上endl,清空文件t.t,执行程序,再看看文件的内容:
pfd
PFD
pfd
PFD
pfd
PFD
  • 交错分布,符合预期

原因
看似写入文件的数据只是缓冲区中,endl保证数据被从缓冲区刷出。
append模式要靠检测文件末尾来保证,如果outA写入的数据还在缓冲区中,自然文件末尾和outA执行写操作(outA<<“pfd”)前没有区别。

  • 所以第一类代码的执行效果其实是outAoutB都向缓冲区写入数据,然后把数据追加到他们打开文件时读到的“文件末尾”。也就是说,outAoutB的读写没有更新文件末尾,自然得到的文件内容就是”各成一派

而第二类代码保证每次写入操作都更新文件末尾,那么自然就会得到文件内容“交错分布”的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值