`
ZeaLoVe
  • 浏览: 91700 次
  • 性别: 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++标准输入输出流是C++语言中数据输入和输出的基础部分,包括标准输入设备键盘、标准输出设备显示器、外存磁盘上的文件和内存中指定的字符串存储空间等几个方面。C++语言系统为实现数据的输入和...

    C++格式输入输出

    在C++中,格式化输入输出主要依赖于标准库`&lt;iostream&gt;`中的`cout`和`cin`对象。这些对象提供了一系列的方法来调整输入输出的行为,例如设置精度、显示格式等。下面将分别介绍这些核心概念及其应用。 ##### 1. **...

    C++输入输出流实验

    本实验旨在帮助学生深入理解和熟练运用C++中的输入输出流,包括标准输入输出流和文件输入输出流。 首先,我们关注的是标准输入输出流。在C++中,`std::cin` 用于标准输入,通常是从键盘获取用户输入;而 `std::cout...

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

    首先,标准C++的输入输出流(IOStream)是C++标准库中用于执行输入和输出操作的类和对象的集合。IOStream是面向对象的,为程序员提供了处理不同类型数据流的强大工具。在IOStream的基础章节中,介绍了IO流的最基础...

    c++输入输出流教案

    实验8的目标是帮助学生理解和掌握C++的输入输出流以及标准输入输出流的使用,特别是格式化的输入输出。以下是实验的三个主要内容: 1. 计算三角形面积:用户需输入三角形的三边a、b、c。首先,程序需要验证这三条边...

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

    在C++中,标准输入输出操作主要依赖于输入输出流库iostream,通过流(stream)对象实现数据的输入和输出。流是与I/O设备相关联的数据通信对象,能够实现不同类型数据的传输。 在C++中,标准输入流对象是cin,标准...

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

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

    标准C++输入输出流与本地化(高清PDF)

    本书《标准C++输入输出流与本地化》是由Angelika Langer和Klaus Kreft撰写,何渝等人翻译的,旨在介绍C++标准IO流以及本地化。该书被归类于计算机技术译林精选系列,由人民邮电出版社出版,于2001年4月发行,定价为...

    C++输入输出流案例

    C++输入输出流案例 本文详细介绍了C++输入输出流的概念、类别、对象和常用操作,通过实例代码和图书管理系统的综合案例,巩固文件操作。 一、输入流 C++中输入流主要有三种:cin、getline和get。cin是 istream 类...

    输入输出c++程序

    C++中的输入输出主要通过标准库中的`iostream`来实现,特别是`std::cin`用于输入,`std::cout`用于输出。首先,我们需要包含`iostream`头文件,然后就可以开始编写简单的I/O程序了。 ```cpp #include int main() ...

    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++实验报告

    - 实验涵盖了基本的I/O操作,包括标准输入输出、格式控制、文件读写以及容器(如`vector`)的使用。这些技能是C++编程的基础,对于理解和处理各种数据输入输出场景非常关键。 这个实验旨在帮助学生熟悉C++的流类库...

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

    在C++编程中,标准输入输出流是程序与操作系统交互的基础,它们允许程序接收用户输入并展示输出结果。本文将详细讲解如何使用标准输入输出流对象,并探讨如何处理ASCII文件,特别是通过文件流进行操作。 一、标准...

    C++输入输出流详解

    ### C++ 输入输出流详解 #### 一、概述 C++ 的输入输出流库提供了强大的功能,用于处理程序与外部设备之间的数据交换。本篇文章将详细介绍 C++ 中的输入输出流,包括常用的输出流和输入流类,以及如何使用这些类...

    C++程序设计基础PPT课件10-输入输出流

    首先,I/O流类库是C++标准库的核心部分,它提供了数据在内存和外部设备之间高效传输的机制。这一库由一系列预先定义的流对象组成,如cin用于标准输入,cout用于标准输出,cerr和clog用于错误处理。程序员可以根据...

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

    C++标准库中的`&lt;locale&gt;`头文件提供了实现本地化功能的相关类和函数。通过创建locale对象,可以设置特定区域的日期、时间、货币、数字格式等。例如,`std::locale loc("zh_CN.UTF-8")`会创建一个代表简体中文的...

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

    1. **标准输入输出流对象**:C++预定义了几个基本的流对象,如`cin`(输入流)和`cout`(输出流)。它们分别与键盘和屏幕关联,用于读取用户输入和显示输出。例如: ```cpp #include int main() { int num; std::...

Global site tag (gtag.js) - Google Analytics