`
ZeaLoVe
  • 浏览: 89801 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

C++的标准输入输出 的一些问题

 
阅读更多

    下午继续研究外排序,想如果把文件读入成一块一块的处理,用手工去完善细节,代码可能会很乱,所以想着把这部分封装起来写一个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++输入输出流与本地化(高清PDF)

    标准C++输入输出流与本地化,让你熟悉C++的流机制。

    标准C++输入输出流与本地化

    详细讲述标准C++输入输出流和定制自己输入输出的好书。

    C++ 输入输出流重定向到外设

    C++ 标准输入输出模块,为字符流操作提供了便捷的途径,软件开发当中,尤其是嵌入式系统开发当中,有时候需要把流信息重新定向到特定的端口,如串口,以太网,USB等。如标准输入输出cout, cin默认将字符流定向到...

    C++实验:输入输出流

    内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(&gt;&gt;)和插入运算符(&gt;&gt;)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...

    C++标准输入和输出的介绍

    C++标准输入和输出

    C++键盘输入与屏幕输出

    键盘输入与屏幕输出 C++中通过输入/输出流来实现标准输入/输出操作。 流是与I/O设备相关联的数据通信对象 输入操作通过流cin来实现 输出操作通过流cout来实现

    程序语言 标准输入输出库

    程序如果不能接受你的指令并返回你的结果,就没有多大用处,因此几乎所有的程序都做输入输出。

    输入输出流(2013级-C++程序设计)

    2013级,C++程序设计课件。第13章 输入输出流,内容 13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流

    C++ 输入输出流

    C++ 输入输出 标准输出流 标准输入流 文件操作与文件流 字符串流

    C++ 输入 输出 格式 带例子

    C++ 输入 输出 格式 一:标准输入函数cin 不知道说它是个函数对还是不对,它是代表标准的输入设备--键盘。他是属于流的,他的用法和流的用法是一样的。也就是:cin&gt;&gt;变量; ..................

    C++程序设计上机题目 标准输入输出流及ASCII文件

    1. 了解标准输入输出流对象的使用方法 2. 掌握利用文件流处理ASCII文件

    C++的输入和输出

    标准的输入输出(标准 I/O),即对系统指定的标准设备的 I/O 操作。用 cin 和 cout 从键盘输入数据,结果输出到显示器屏幕。 文件的输入输出(文件 I/O),即以外存中的文件为对象进行输入和输出。包括从磁盘文件...

    C++ 基本的输入输出cout

    C++ 基本的输入输出 C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。 C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如...

    C++程序设计讲义 输入输出流

    13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流

    标准C++输入输出流及本地化

    本书是一本介绍C++标准IO流和本地化的程序员手册,同时书后还附有完整的相关类、函数、模板和头文件等说明。

    C++标准库stl

    对stl不了解,所以把这个贡献出来 &lt;new&gt; 支持动态内存分配 &lt;typeinfo&gt; 支持变量在运行期间的类型标识 &lt;exception&gt; 支持异常处理,这是处理程序中可能发生的错误的一种方式 ...&lt;cwchar&gt; 支持多字节字符的C样式输入输出

Global site tag (gtag.js) - Google Analytics