流类库与输入输出

合集下载

C第10章流类库和输入输出PPT课件

C第10章流类库和输入输出PPT课件
cerr<<“SEU”; //更换cout和clog对比 j=5/i; return 0; }
cout的重定向(*)
#include <iostream> using namespace std; int main() { cout<<"SEU\n"; cerr<<"NJU\n"; clog<<"PKU\n"; return 0; } //命令行方式下运行 **.exe >>**.txt
中插入一个字符序列。
重载插入和提取运算符
• 插入和提取运算符只能重载为类的友元函数 • 提取运算符重载格式:friend
istream&operator>>(istream&,className &);
• 插入运算符重载格式:friend
ostream&operator<<(ostream&,className &);
第10章 流类库和输入输出
本章要点
10.1 C++的基本流类体系
basic_ ios
basic_ streambuf
指针
basic_ istream
basic_ ostream
basic_ ifstream
basic_ iostream basic_ ofstream
basic_ fstream
else{ s.putback(c); //无括号,返回一个字符到输入缓冲区 s>>re; } //实数 if(s)a=Complex(re,im); return s;}
提取运算符重载:复数类

第11章流类库与输入输出

第11章流类库与输入输出
含有cin、cout、cerr、clog对象,提供无格式和格式化的I/O
iomanip.h fstream.h
包含格式化I/O操纵符,用于指定数据输入输出的格式 处理文件信息,包括建立文件,读/写文件的各种操作接口
每种C++版本还包含其他一些与I/O相关的库,提供特定系统的某些功能
2
标准流和流操作
10.2.1 标准流
// 例11-1 重定向的演示 #include<iostream.h> cerr的输出 void fn( int a, int b ) { if ( b==0 ) cerr<<"Zero encountered. The message cannot be redirected.\n" ; else cout<<a<<'/'<<b<<'='<<a/b<<endl; } void main() { int m, n ; cout<<"one:\n"; cin>>m>>n; fn ( m, n ) ; cerr<<"two:\n"; fn ( 20, 0 ) ; }
10.2.1 标准流
// 例11-1 重定向的演示 不能重定向 #include<iostream.h> void fn( int a, int b ) { if ( b==0 ) cerr<<"Zero encountered. The message cannot be redirected.\n" ; else 可以重定向 cout<<a<<'/'<<b<<'='<<a/b<<endl; } void main() { int m, n ; cout<<"one:\n"; cin>>m>>n; fn ( m, n ) ; cerr<<"two:\n"; fn ( 20, 0 ) ; }

《C++程序设计》电子教案第10章 流类库与输入输出

《C++程序设计》电子教案第10章  流类库与输入输出

C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };

C++程序设计(第二版)第9章流类库与输入输出

C++程序设计(第二版)第9章流类库与输入输出
最多提取nCount-1个字符给buf, 遇结束符delim或到达文件结束, 则停止提取。存入buf中的字符 串以0结尾,delim不存入buf。
9.3.3-1 标准输入流成员函数
函数原型 istream& getline(char* buf,int nCount,char delim=’\n’)
9.2.2 标准流对象
四个流对象均是文 本流对象,主要工 作是完成程序中的 数据与外部设备的 传输及数据格式的 转换。
键盘 istream cin
显示器 ostream cout
程序
9.3 标准设备的输入/输出
9.3.1 输入流 9.3.2 输出流 9.3.3 标准输入/输出函数成员 9.3.4数据流的错误检测
9.1 流的概念
C++语言本身并不包含输入输出功能,但C++标准库提 供了一系列输入输出流类,通过流类完成数据的输入输出。
在C++中,将数据从一个对象到另一个对象的传输抽象为 “流”。从流中获取数据的操作称为提取操作,向流中添 加数据的操作称为插入操作,数据的输入与输出就是通过 I/O流来实现的。
9.3.1 输入流
istream 类提供了格式化和非格式的输入功能。常用的 输入方法是在标准输入流对象cin上使用提取运算符”>>”。 从与键盘相连的标准输入流cin中提取数据并赋值给相应的 对象,提取运算符返回cin流对象的引用,因此提取运算符 可以连用。
cin>>变量名1>>变量名2…>>变量名n; 数据的提取是从输入回车开始的,提取运算符忽略了流 中的空格、制表符、Enter键等空白字符。
9.3.1 输入流

C++:流类库与输入输出

C++:流类库与输入输出

C++:流类库与输⼊输出7.2.1 C++的输⼊输出流ios:流基类(抽象类)istream:通⽤输⼊流类和其他输⼊流的基类ostream:通⽤输出流类和其他输出类的基类iostream:通⽤输⼊输出流类和其他输⼊输出流类的基类(以下的派⽣类对象有cin、cout、cerr、clog)ifstream:输⼊⽂件流类ofstream:输出⽂件流类fstream:输⼊输出⽂件流istrstream:输⼊字符串流类ostrstream:输出字符串流类strstream:输⼊输出字符串类iostream_withassign: 通⽤输⼊输出流类和其他输⼊输出流类iostream的的派⽣类7.2.2 预定义的流对象C++中包含⼏个预定义的流对象,它们是标准输⼊流对象cin、标准输出流对象cout、⾮缓冲型的标准出错流对象ceer、缓冲型的标准出错流对象clogcin是istream的派⽣类istream_withassign的对象,它与标准输⼊设备(通常是键盘)相联系。

cout是ostream的派⽣类ostream_withassign的对象,它与标准输出设备(通常是显⽰器)相联系。

ceer是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。

clog是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。

由于istream和ostream类都在头⽂件iostream中声明的,因此只要在程序中包含头⽂件iostream.h,C++程序开始时这四个标准流对象的构造函数都被⾃动调⽤。

7.2.3 输⼊输出流的成员函数(1)put函数put函数⽤于输出⼀个字符格式:cout.put(char ch)例如:cout.put('A')===cout.put(65)===cout.put(25+40)(2)get函数get函数的功能与提取运算符>>类似,主要不同之处是get函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。

流类库与输入输出

流类库与输入输出

广义文件 (标准设备、磁盘文件)
程序实现
系统实现

C++的流类体系
抽象类、虚析构 I/O格式、错误处理 指针成员
管理流 缓冲区
basic_ios
全局对象cin
basic_streambuf
全局对象cout、 cerr、clog
basic_istream
标准设备I/O
basic_ ostream
重载<<、>>运算符
第9章 流类库与输入输出(3)
1、C++中流的概念及流类体系
2、标准设备的输入输出
3、文件的输入输出
4、文件与对象
1、C++中流的概念及流类体系

流(stream)的概念
数据从一个对象到另一个对象的流动 抽象:实现数据流动的接口(流)
输入输出流类库(封装流对象)
输出 程序 (内存)
输入
流 (对象)
#include<iostream>
提示:自学了解basic_ios提供的格式化输入输出控制及其 一般使用方法
2、标准设备的输入输出

输入输出健壮性的控制*(了解)
basic_ios中定义了流操作状态及针对状态的操作函数,
用以对输入输出状态进行监控。

istream中的部分成员
int istream::get(); //提取一个字符,包括空格等 istream&istream::get(char &); istream&istream::get(unsigned char &);
istream&istream::get(char *,int,char=‟\n‟); istream&istream::get(unsigned char *,int,char=‟\n‟); istream&istream::getline(char *,int,char=‟\n‟); istream&istream::getline(unsigned char *,int,char=‟\n‟);

第十一章 流类库与输入输出

第十一章 流类库与输入输出

C++语言程序设计第十一章输入/输出本章主要内容●I/O流的概念及流类库结构●输出流●输入流●输入/输出流输入/输出(I/O)概述⏹输入/输出(简称I/O)是程序的一个重要组成部分:◆程序运行所需要的数据往往要从外设(如:键盘、文件等)得到◆程序的运行结果通常也要输出到外设(如:显示器、打印机、文件等)中去。

⏹在C++中,输入/输出不是语言定义的成分,但有一个I/O软件包,称为I/O流类库。

I/O流的概念⏹当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。

⏹流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。

⏹程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。

⏹读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。

面向对象的输入/输出C++的I/O 流类库提供了以面向对象方式进行的输入/输出。

以下是I/O 类库中基本的I/O 类:iosistream (控制台输入)ostream (控制台输出)ifstream (文件输入)istrstream (字符串变量输入)ofstream (文件输出)ostrstream (字符串变量输出)iostream (输入/输出)fstream (文件输入/输出)strstream (字符串变量输入/输出)P482 图11-1和表11-1给出了I/O 流类层次和说明。

⏹在进行输入/输出时,首先创建一个I/O类的对象,然后,通过该对象(调用对象类的成员函数)进行输入/输出操作。

⏹istream类重载了操作符“>>”(抽取),用它可以进行基本类型数据的输入操作。

例如:istream in(...);in >> x; //x是一个变量in >> y; //y是一个变量或in >> x >> y;⏹ostream类重载了操作符“<<”(插入),用它可以进行基本数据类型数据的输出操作。

第12章流类库和输入输出概论

第12章流类库和输入输出概论

第12章流类库和输入输出【内容提要】流的概念及流类库输入输出的格式控制输入与输出运算符的重载文件操作【重点与难点】12.1 流的概念及流类库12.1.1 流的概念C++中的流是指数据从一个对象传递到另一个对象的操作。

从流中读取数据称为提取操作,向流内添加数据称为插入操作。

流在使用前要建立,使用后要删除。

如果数据的传递是在设备之间进行,这种流就称为I/O流。

C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。

C++流预定义了4个标准流类对象,它们可以直接用来输入输出。

这些标准流类对象都包含在头文件iostream.h中。

istream cin; //与标准输入设备相关联的标准输入流。

ostream cout; //与标准输出设备相关联的标准输出流。

ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。

ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。

12.1.2 流类库C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。

使用这些流类库时,必须包含相应的头文件。

ios类及其派生类为用户提供了使用流类的接口。

以下给出ios类及其派生类的层次结构图。

iosistreamifstreamistream_withassign iostreamistrstream fstreamostream strstreamofstream sdiostreamostream_withassignostrstream图12.1 ios类的层次关系12.2 输入输出的格式控制C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。

12.2.1 用ios类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。

c++11-流类库与输入输出

c++11-流类库与输入输出

6
输 插入运算符(<<) 插入运算符( ) 出 流
插入(<<)运算符是所有标准C++数据类型预先 设计的。 用于传送字节到一个输出流对象。
7
控制输出格式
输 出 流
控制输出宽度

为了调整输出,可以通过在流中放入setw操纵符或调用width成 员函数为每个项指定输出宽度。
例11-1 使用width控制输出宽度
8
输 例:使用 填充 使用*填充 出 流
#include <iostream> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) 输出结果: 输出结果: { cout.width(10); ******1.23 ******1.23 cout.fill('*'); cout<<values[i]<<'\n'; *****35.36 } *****653.7 } ***4358.24
12
输 进制 出 流
dec、oct和hex操纵符设置输入和输出的缺省进 制。
13
输 输出文件流成员函数 出 流
输出流成员函数有三种类型:
– – –
与操纵符等价的成员函数。 执行非格式化写操作的成员函数。 其它修改流状态且不同于操纵符或插入运算符的成 员函数。
14
输 输出文件流成员函数 出
open函数
ifstream myFile;//建立一个文件流对象 myFile.open("filename",iosmode); myFile.open("filename",iosmode); //打开文件 打开文件"filename" //打开文件"filename"

流类库与输入输出

流类库与输入输出

流类库与输入/输出。

本章主要内容:a)I/O流的概念b)预定义的标准流与提取和插入运算符c)使用I/O成员函数输入流d)文件流2.概述a)输入/输出( input/output ) 是指程序与计算机的外部设备之间进行信息交换。

b)输入操作指从指定设备收取一个字符序列。

c)输出操作将一个对象转换为一个字符序列,输出到某一个设备;d)输入输出操作可以看成是字符序列在源和目的之间的流动。

将执行这个输入/输出操作的类体系称为流类,提供这个流类实现的系统称为流类库。

e)在C++中,没有专门的输入/输出语句,为了方便用户灵活地完成输入/输出,C+提供了功能强大的输入/输出流类库。

f)C++的I/O系统为了向程序员提供一个统一的接口,使程序的设计尽可能地与所访问的具体设备无关,在程序员与被使用的设备之间提供了一个抽象的概念——流。

g)读操作在流数据抽象中被称为(从流中)提取>>,h)写操作被称为(向流中)插入<<。

i)C++语言支持的外部设备是各种各样的,它将各设备都转换成一个称为流的逻辑设备,由流来完成对不同设备的具体操作。

对程序员而言,所有流的行为是一样的,所以一个用来进行磁盘文件写入操作的函数,也可以用来向显示器写信息。

3.使用流的优点:(与printf,scanf比较)a)(1)可以用其严格的类型检查机制减少因使用不当引起的程序错误;b)(2)流是面向对象的,可以利用类的继承性和多态性,给用户提供统一的接口,实现更多的功能。

4.C++中的流类体系在头文件“iostream.h”中作了说明。

a)*类ios是类istream和类ostream的虚基类;b)*streambuf不是ios类的派生类,类ios中有一个指c)针成员指向类streambuf的一个对象。

d)*类streambuf是用来管理一个流的缓冲区。

e)*类iostream是类istream和类ostream的公有派生,f)从而通过#include “iostream.h”可以完成输入操作和输出操作。

第10章流类库与输入输出

第10章流类库与输入输出

程序中可直接对上述4个预定义流类对象进行读写,而不 必先进行“打开文件”的操作,使用完后也不需要进行“关 闭文件”的操作(因为这些流类对象与文件之间的联系是预 定义好的,可认为系统已为每一程序都隐含进行了对它们的 打开与关闭操作)。
5
4.
C++的文件流类系统
在头文件“ fstream.h” 中说明 ( 预定义 ) 了一批文件流 类,专用于磁盘文件: ifstream -- 由istream派生,支持从磁盘文件中输入 (读入)数据; ofstream -- 由ostream派生,支持往磁盘文件中输出 (写出)数据; fstream -- 由 iostream 派生,支持对磁盘文件进行 输入和输出数据的双向操作。 C++中没有预定义的文件流(类对象),程序中用到的所 有文件流类对象都要进行自定义。
15
(2) ios::setf a. 格式一: long setf( long lFlags ); 通过参数lFlags来设置指定的格式控制标志位。 注意,与 flags 函数的“替换”方式不同,此处为“添 加”方式,即是说,它并不更改其它lFlags不涉及到的那些 标志位的当前值。 b. 格式二: long setf( long lFlags, long lMask ); 设置指定的格式控制标志位的值(首先将第二参数 lMask 所指定的那些位清零,而后用第一参数 lFlags 所给定 的值来重置这些标志位)。
iostream -- 由 istream 与 ostream 共同派生,支持输 入和输出双向操作。 4
C++预定义的流有: extern extern extern extern istream ostream ostream ostream cin; cout; cerr; clog; ----对象cin对应于键盘文件 对象cout对应于显示器文件 对象cerr对应于显示器文件 对象clog对应于显示器文件

第九章_流类库和输入输出(C++程序设计(第2版)吴乃陵)

第九章_流类库和输入输出(C++程序设计(第2版)吴乃陵)
流类库和输入/ 第九章 流类库和输入/输出
文件是存储在磁盘、磁带等外部设备上数据集合, 文件是存储在磁盘、 磁带等外部设备上数据集合, 每 一个文件都必须有一个唯一名字。 一个文件都必须有一个唯一名字。使用文件前必须首先 打开文件,使用后必须关闭文件。 打开文件, 使用后必须关闭文件。对文件的操作时通过 文件流类完成的。文件流类在流与文件之间建立连接, 文件流类完成的。文件流类在流与文件之间建立连接, 使用这些文件流类必须用#include 编译指令将fstream.h 使用这些文件流类必须用 编译指令将 包含进来。 包含进来。 数据从一个对象到另一个对象的传送被抽象为 数据的输入/输出就是通过输入 输出就是通过输入/输出流来实现 “流”。数据的输入 输出就是通过输入 输出流来实现 的。 流是一种抽象的概念, 流是一种抽象的概念,负责在数据的产生者和数据 的使用者之间建立联系,并管理数据的流动。 的使用者之间建立联系,并管理数据的流动。
4.关闭文件。三个文件流类各有一个关闭 关闭文件。 文件的成员函数 : void ifstream::close(); void ofstream::close(); void fstream::close(); 使用很方便, 使用很方便,如: iofile.close();
关闭文件时, 关闭文件时,系统把该文件相关联的文件缓冲 区中的数据写到文件中,保证文件的完整, 区中的数据写到文件中,保证文件的完整,收回与 该文件相关的内存空间,可供再分配, 该文件相关的内存空间,可供再分配,把磁盘文件 名与文件流对象之间的关联断开, 名与文件流对象之间的关联断开,可防止误操作修 改了磁盘文件。如又要对文件操作必须重新打开。 改了磁盘文件。如又要对文件操作必须重新打开。 关闭文件并没有取消文件流对象, 关闭文件并没有取消文件流对象,该文件流对 象又可与其他磁盘文件建立联系。 象又可与其他磁盘文件建立联系。文件流对象在程 序结束时,或它的生命期结束时,由析构函数撤消。 序结束时,或它的生命期结束时,由析构函数撤消。 它同时释放内部分配的预留缓冲区。 它同时释放内部分配的预留缓冲区。

第12章流类库和输入输出概论

第12章流类库和输入输出概论

第12章流类库和输入输出【内容提要】流的概念及流类库输入输出的格式控制输入与输出运算符的重载文件操作【重点与难点】12.1 流的概念及流类库12.1.1 流的概念C++中的流是指数据从一个对象传递到另一个对象的操作。

从流中读取数据称为提取操作,向流内添加数据称为插入操作。

流在使用前要建立,使用后要删除。

如果数据的传递是在设备之间进行,这种流就称为I/O流。

C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。

C++流预定义了4个标准流类对象,它们可以直接用来输入输出。

这些标准流类对象都包含在头文件iostream.h中。

istream cin; //与标准输入设备相关联的标准输入流。

ostream cout; //与标准输出设备相关联的标准输出流。

ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。

ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。

12.1.2 流类库C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。

使用这些流类库时,必须包含相应的头文件。

ios类及其派生类为用户提供了使用流类的接口。

以下给出ios类及其派生类的层次结构图。

iosistreamifstreamistream_withassign iostreamistrstream fstreamostream strstreamofstream sdiostreamostream_withassignostrstream图12.1 ios类的层次关系12.2 输入输出的格式控制C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。

12.2.1 用ios类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。

流类库与输入输出

流类库与输入输出

if ( ! infile )
{ cerr<<″open error!″<<endl; exit(1); } for(i=0;i<10;i++) { //从磁盘文件读入10个整数,顺序存放在a数组中 cout<<a[i]<<″ ″; }
28
infile>>a[i];
//在显示器上顺序显示10个数
cout<<endl; max=a[0]; order=0; for(i=1;i<10;i++) if(a[i]>max) //将当前最大值放在max中, 序号放在order中 { max=a[i]; order=i; } cout<<"max="<<max<<endl cout<<"order="<<order<<endl;
Complex Complex∷operator + (Complex &c2) {return Complex(real+c2.real,imag+c2.imag); } ostream& operator << (ostream& output, Complex& c) { output<<“(“<<c.real<<“+”<<c.imag<<“i)” <<endl; return output; } istream& operator >> (istream& input, Complex& c) { cout<<“input real and imaginary :”; input>>c.real>>c.imag; return input; }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
三、文件输入输出
ASCII文件与二进制文件
ASCII文件提供了高级的输入输出功能,把若干个字节转换为一个有意 义的单位,然后以ASCII字符形式输入输出 二进制文件提供低级的输入输出功能,这种输入输出不经过转化,因此 效率较高,传输速度快,效率高
四、字符串流
将一组数据保存在字符数组中
using namespace std; struct student {int num; char name[20]; float score; } int main( ) {student stud[3]={1001,″Li″,78,1002,″Wang″,89.5,1004,″Fun″,90}; char c[50]; //用户定义的字符数组 ostrstream strout(c,50); //建立输出字符串流,与数组c建立关联,缓冲区长 30 for(int i=0;i<3;i++) //向字符数组c写3个学生的数据
c.将文件流与新文件重新关联: ifstream infile(“in”); infile.close(); infile.open(“next”);
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
三、文件输入输出
1. 对ASCII文件的操作 #include <fstream> using namespace std; int main( ) {int a[10]; ofstream outfile(″f1.dat″,ios::out); if(!outfile) {cerr<<″open error!″<<endl; exit(1); } cout<<″enter 10 integer numbers:″ <<endl; for(int i=0;i<10;i++) {cin>>a[i]; outfile<<a[i]<<″ ″;} outfile.close(); return 0; } #include <fstream> int main( ) {int a[10]; ifstream infile(″f1.dat″,ios::in|ios::noc reate); if(!infile) {cerr<<″open error!″<<endl; exit(1); } for(i=0;i<10;i++) {infile>>a[i cout<<a[i]<<″ “;} infile.close(); return 0; }
流类库与输入输出操作
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
四、字符串流
istrstream;由istream派生而来,从内存空间读取数据
字符串流类
ostrstream;由oftream派生而来,将数据流向内存空间 strstream;由oftream派生而来,向内存空间读写数据
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
三、文件输入输出
2. 对二进制文件进行读写 2.1 利用成员函数read和write读写二进制文件 istream .read(char *buf,int len) ostream .write(char *buf,int len) 2.2 与文件指针有关的流成员函数 成员函数 gcount() tellg() seekg(文件中位置) tellp( ) seekp(文件中的位置) 作用 返回最后一个输入所读入的字节数 返回输入文件指针当前的位置 将文件指针移到指定的位置 返回输出文件指针当前的位置 将输出文件指针移动到指定的位置
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
二、标准输入输出流
有一元二次方程ax2+bx+c=0,其一般解为x1,2=(-b±b2-4ac)/2a,但若 a=0,或b2-4ac<0时,用此公式出错。
#include <iostream> #include <cmath> using namespace std; int main( ) {float a,b,c,disc; cout<<″please input a,b,c:″; cin>>a>>b>>c; if (a==0)cerr<<″a is equal to zero,error!″<<endl; else if ((disc=b*b-4*a*c)<0) cerr<<″disc=b*b-4*a*c<0″<<endl; else { cout<<″x1=″<<(-b+sqrt(disc))/(2*a)<<endl; cout<<″x2=″<<(-b-sqrt(disc))/(2*a)<<endl;} return 0; }
三、文件输入输出
1.打开磁盘文件
方式一 ofstream outfile; outfile.open(″f1.dat″,ios::out); 方式 ios:out ios:in ios:app ios:ate ios:trunc ios:binary ios:nocreate ios:::in|ios::binary ios:in|ios:out 方式二 ofstream outfile(“f.dat”,”ios:out”); 作用 以输出方式打开文件 以输入方式打开文件 以输出方式打开文件,写的数据添加到末尾 打开一个已有文件,直接定位到末尾 打开一个文件,如果已经存在删除数据 已二进制形式打开一个文件 打开一个文件,如果不存在打开失败 以二进制输入方式打开二进制文件 以输入输出方式打开一个文件
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
三、文件输入输出
现有一批学生数据存储于(stuInfo.txt),数据成员包括(学号、姓名 性别),要求输入一条学生信息,写入文件后,显示其他所有学生的信息
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
三、文件输入输出
2.文件有效性检查及关闭
a.有效性检查: if(!infile){ cerr<<“error:unable to open input file”; exit(1) } b.关闭文件: infile.close();
二、标准输入输出流
标准输入输出流
cin:标准输入 istream类的对 象用来处理标准 输入,即键盘输 入。
cout:标准输出 ostream类的对 象,用来处理标 准输出,即屏幕 输出。
cerr:标准输出 ostream类的对 象,用来处理标 准出错信息,不 带缓冲区,发给 它内容立即输出
clog:标准输出 ostream类的对 象,用来处理标 出错信息,带缓 区,缓冲区满时 被输出
东南大学软件学院(苏州 东南大学软件学院 苏州 ) C++程序设计 程序设计
格式控制) 二、标准输入输出(格式控制 标准输入输出 格式控制
#include <iostream> 1.使用控制符控制格式 #include <iomanip>//不要忘记包含此头文件 using namespace std; int main()控制符 作用 {int a; dec 以十进制输出 cout<<″input a:″; 以十六进制输出 cin>>a; hex cout<<″dec:″<<dec<<a<<endl; //以十进制形式输出整数 oct 以八进制输出 cout<<″hex:″<<hex<<a<<endl; //以十六进制形式输出整数a setbase(n) 以n进制形式输出(n的取值,8,10,16) cout<<″oct:″<<setbase(8)<<a<<endl; //以八进制形式输出整数a setfill(c) 设置填充符c, c可以是常量或变量 char *pt=″China″; //pt指向字符串″China″ cout<<setw(10)<<pt<<endl; //指定域宽为10,输出字符串 setw(n) 设置字段宽度为n位 cout<<setfill(′*′)<<setw(10)<<pt<<endl; //指定域宽10,输出字符 setiosflags(ios:left) 输出数据左对齐 double pi=22.0/7.0; //计算pi值 setiosflags(ios:fixed) 设置浮点以固定的小数位数显示 cout<<setiosflags(ios::scientific)<<setprecision(8);//按指数形式输出, cout<<″pi=″<<pi<<endl; //输出pi值 setiosflags(ios:showpos) 输出时正数给出”+” cout<<″pi=″<<setprecision(4)<<pi<<endl; //改为4位小数 cout<<″pi=″<<setiosflags(ios::fixed)<<pi<<endl;//改为小数形式输出 注意:这些控制符号都在iomanip头文件中,使用时应在程序中包含相关 return 0; 头文件 }
相关文档
最新文档