C++ Exercises(九)

本文探讨了使用C++进行文件读写时遇到的问题,包括字符计数与位置标记等现象,通过不同的测试案例对比了文本与二进制模式下的差异。

<<C++ Primer>>第三版P905页的这个程序有很多问题想不明白:
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

None.gif#include<iostream>
None.gif#include
<fstream>
None.gif
usingnamespacestd;
None.gif
None.gif
intmain()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.giffstreaminOut(
"D://copy.out",ios_base::in|ios_base::app);
InBlock.gif
intcnt=0;
InBlock.gif
charch;
InBlock.gifinOut.seekg(
0);
InBlock.gif
InBlock.gif
while(inOut.get(ch))
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifcout.put(ch);
InBlock.gifcnt
++;
InBlock.gif
if(ch=='/n')
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifstreamoffmark
=inOut.tellg();//标记当前位置
InBlock.gif
inOut<<cnt<<'';
InBlock.gifinOut.seekg(mark);
//恢复位置
ExpandedSubBlockEnd.gif
}

ExpandedSubBlockEnd.gif}

InBlock.gifinOut.clear();
InBlock.gifinOut
<<cnt<<endl;
InBlock.gifcout
<<"["<<cnt<<"]/n";
InBlock.gif
return0;
ExpandedBlockEnd.gif}

None.gif

用下面的数据进行测试:

None.gifabcd
None.gifefg
None.gifhi
None.gifj
None.gif


分别保存为

data.txtcopy.out,运行结果:

None.gifabcd
None.gifefg
None.gifhi
None.gif[12]


后来我想可能是因为不是读的二进制的缘故,所以我改为:

None.giffstreaminOut("D://data.txt",ios_base::in|ios_base::app|ios_base::binary);
None.gif
None.gif

分别进行测试后,结果就更奇怪了。

这是data.txt的:

None.gifabcd
None.gifefg
None.gifhi
None.gif[15]
None.gif


这是copy.out的:

None.gifabcd
None.gifefg
None.gifj
None.gif[18]

这到底是为什么呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值