<<C++ Primer>>第三版P905的这个程序有很多问题想不明白:

None.gif#include <iostream>
None.gif#include 
<fstream>
None.gif
using namespace std;
None.gif
None.gif
int main()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    fstream inOut( 
"D:\\copy.out", ios_base::in|ios_base::app);
InBlock.gif    
int cnt=0;
InBlock.gif    
char ch;
InBlock.gif    inOut.seekg(
0);
InBlock.gif    
InBlock.gif    
while ( inOut.get( ch ) )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        cout.put( ch );
InBlock.gif        cnt
++;
InBlock.gif        
if ( ch == '\n' )
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            streamoff  mark 
= inOut.tellg();// 标记当前位置
InBlock.gif
            inOut << cnt << ' ';
InBlock.gif            inOut.seekg( mark ); 
// 恢复位置
ExpandedSubBlockEnd.gif
        }

ExpandedSubBlockEnd.gif    }

InBlock.gif    inOut.clear();
InBlock.gif    inOut 
<< cnt << endl;
InBlock.gif    cout 
<< "" << cnt << " ]\n";
InBlock.gif    
return 0;
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.giffstream inOut( "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 ]

 

这到底是为什么呢?