下午继续研究外排序,想如果把文件读入成一块一块的处理,用手工去完善细节,代码可能会很乱,所以想着把这部分封装起来写一个AutoBuf类来处理,其实他就两个功能,一次性读入一个固定长度的整形串,然后每次有请求的时候返回Cur指向的那个数同时Cur++,一但遍历完buf就从文件继续读一批出来,同时用一个isLast记录是否已经是最后一块了,当读完最后一块时,再请求数据就会返回-1 表示没了。
就这样一个简单的需求,因为我调试的时候输入语句有些问题,导致其实不是业务逻辑的错误而调试了一下午。其实我发现这样一个问题也很偶然,因为我发现当我打开的是小文件的时候,总是显示读入正常,而打开大文件,输出确实一片空白,但明明已经有读入数据的反应而且文件也很正常。
现在就回顾一下我的发现
ifstream in(".//data9-0.txt");
int i=0;
while( i<bufSize && in>>buf[i] )
{
cout<<buf[i]<<" ";
++i;
}
因为我封装ifstream时候老是出问题,所以我用不封装的试了下。问题依旧。
int i=0;
while( i<bufSize && in>>buf[i] )
{
// cout<<buf[i]<<" ";
++i;
}
cout<<endl<<"read:"<<i<<endl;
for(int j=0;j<i;++j)
{
cout<<buf[j]<<endl;
}
然后我改成这样的输出语句,结果一下就正常了。多大的文件都可以读出。
我继续尝试,在封装的里面输出,结果长的还是老问题。。我看了看这两个的区别,忽然想到,标准输入输出是有个缓冲的概念的,如果不显示调用flush输出缓冲的话,会一直覆盖,而endl其实是调用Flush的同时换行的。所以我将内部的调试语句改成
AutoBuf buf;
buf.AttachFile(".//data9-0.txt");
buf.read();
int tmp;
while((tmp=buf.autoGet())!=-1)
{
cout<<tmp<<endl;
}
for(int j=0;j<buf.size;++j)
{
cout<<buf.buf[j]<<endl;
}
然后神奇的输出了。。。我真觉得伤不起啊,我以为是业务逻辑的问题,查看了一个多小时,结果居然是这样的问题。C++确实很多细枝末节会让人很头疼,不过发现问题解决了,多少还有点收获。
大家以后写调试信息输出的时候,一定要记得flush缓冲,或者endl.......
分享到:
相关推荐
C++的标准输入输出流的用法,灵活掌握输入输出
标准C++输入输出流与本地化,让你熟悉C++的流机制。
详细讲述标准C++输入输出流和定制自己输入输出的好书。
C++ 标准输入输出模块,为字符流操作提供了便捷的途径,软件开发当中,尤其是嵌入式系统开发当中,有时候需要把流信息重新定向到特定的端口,如串口,以太网,USB等。如标准输入输出cout, cin默认将字符流定向到...
内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(>>)和插入运算符(>>)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...
C++标准输入和输出
键盘输入与屏幕输出 C++中通过输入/输出流来实现标准输入/输出操作。 流是与I/O设备相关联的数据通信对象 输入操作通过流cin来实现 输出操作通过流cout来实现
程序如果不能接受你的指令并返回你的结果,就没有多大用处,因此几乎所有的程序都做输入输出。
2013级,C++程序设计课件。第13章 输入输出流,内容 13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流
C++ 输入输出 标准输出流 标准输入流 文件操作与文件流 字符串流
C++ 输入 输出 格式 一:标准输入函数cin 不知道说它是个函数对还是不对,它是代表标准的输入设备--键盘。他是属于流的,他的用法和流的用法是一样的。也就是:cin>>变量; ..................
1. 了解标准输入输出流对象的使用方法 2. 掌握利用文件流处理ASCII文件
标准的输入输出(标准 I/O),即对系统指定的标准设备的 I/O 操作。用 cin 和 cout 从键盘输入数据,结果输出到显示器屏幕。 文件的输入输出(文件 I/O),即以外存中的文件为对象进行输入和输出。包括从磁盘文件...
C++ 基本的输入输出 C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。 C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如...
13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流
本书是一本介绍C++标准IO流和本地化的程序员手册,同时书后还附有完整的相关类、函数、模板和头文件等说明。
对stl不了解,所以把这个贡献出来 <new> 支持动态内存分配 <typeinfo> 支持变量在运行期间的类型标识 <exception> 支持异常处理,这是处理程序中可能发生的错误的一种方式 ...<cwchar> 支持多字节字符的C样式输入输出