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

第10章 输入/输出流
10.2 C++语言的基本流类体系
10.2.1 C++语言基本流类体系的构成
ios
istream iostrea m
ostream
istream_withassign
ostream_withassign
图10.1 I/O流类库的类层次
2019/2/22
第10章 输入/输出流
2019/2/22
第10章 输入/输出流
10.2 C++语言的基本流类体系
10.2.2标准输入/输出流
标准I/O流是C++语言预定义的对象,提供内存与 外部设备进行数据交互功能,对数据进行解释和传输, 提供必要数据缓冲。C++语言的I/O流类库中预先定 义了4个标准流对象:cin、cout、cerr和clog,它们不 是C++语言中的关键字。只要程序中包含了头文件 iostream,编译器调用相应的构造函数产生这4个标准 流对象,用户在程序中就可以直接使用了。
《C++程序设计基础教程》
第 10 章
输入/输出流
战略决定一切、执行决定一切、细 节决定一切!
第10章 输入/输出流
本章内容
输入/输出流的概念
1
C++语言的基本流类体系 2 文件的输入/输出
程序举例
2019/2/22
3
4
第10章 输入/输出流
数据的输入和输出(简写为I/O)包括对标准输入设备 键盘和标准输出设备显示器、对在外存磁盘上的文件和对 内存中指定的字符串存储空间进行输入/输出3个方面。 对标准输入设备和标准输出设备的输入/输出简称为标 准I/O,对在外存磁盘上文件的输入/输出简称为文件I/O, 对内存中指定的字符串存储空间的输入/输出简称为串I/O。
C第10章流类库和输入输出PPT课件

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;}
提取运算符重载:复数类
流类库和输入输出C程序设计第2版课件

if (!ifile)
{ cout << "test文件不能打开" << endl;
return 0; } char str[80]; ifile >> str; // 与get不同, >>遇到空格时结束 ifile.close();
int=filebuf::openprot);
ofstream::ofstream(const char*,int=ios::out, int=filebuf::openprot);
fstream::fstream(const char*,int, int=filebuf::operprot);
所以1,2两步可合成: fstream iofile(”myfile.txt”,ios::in|ios::out);
int=filebuf::opernprot); void fstream::open(const char*,int,
int=filebuf::openprot); 第一个参数为要打开的磁盘文件名。第二个参数为打开方式, 有输入(in),输出(out)等,打开方式在ios基类中定义为 枚举类型。第三个参数为指定打开文件的保护方式,一般取默 认。所以第二步可如下进行: iofile.open(“myfile.txt”,ios::in|ios::out);
指针
streambuf
istream
ostream
ifstream
iostream
fstream
主要输入/输出流模板层次
ofstream
第2页,共21页。
C语言程序设计课件第10章 输入输出流

# include <iomanip.h>
void main(void)
{ char *name[]={"Zhou","Zhao","Liu","Chen","Li"};
double score[]={89,87.2,78.33,91.444,85.5555};
for (int i=0;i<5;i++) { cout.setf(ios::left);
如整数1025,以文本形式(31003236H)存储占用
四个字节,以二进制形式(0401H)存储则只占用
两个字节。
2021/7/13
23
2.文件的操作 文件操作分成4步: (1)定义文件流对象 ifstream 文件输入流对象; ofstream 文件输出流对象; fstream 文件输入/出流对象; (2)打开文件 文件流对象.open(磁盘文件名,输入输出模式)
14
2.其它格式控制
若要改变流的其它输出格式(如对齐方式), 可使用ios类中定义的成员函数setf来实现, 函数格式如下:
cout.setf(格式标志)
格式标志在类ios中被定义为枚举值,在引用这 些格式标志时要在前面加上类名ios和域运算 符“::”。
2021/7/13
15
【例10.3】 将学生姓名与比赛得分通过初始化 赋给数组name[5]、score[5],指定姓名域宽 为10个字符、左对齐,比赛得分为右对齐、 用定点方式、小数点后有2位有效数字。
2021/7/13
22
10.3 文件操作与文件流
10.3.1 文件的概念
1.文件
流类库与输入输出-精品.ppt

//指定域宽为10
cout<<pt<<endl;
//输出字符串
cout.width(10);
//指定域宽为10
return 0;
}
东南大学软件学院(苏州 ) C++程序设计
三、文件输入输出
ASCII文件与二进制文件
ASCII文件提供了高级的输入输出功能,把若干个字节转换为一个有意 义的单位,然后以ASCII字符形式输入输出
int main()控制符
作用
{int a; dec cout<<″input a:″; cin>>a; hex
以十进制输出 以十六进制输出
cout<<″deoc:c″t<<dec<<a<<endl;
//以十进以制八形进式制输出整数
ccoouutt<<<<s″″eohtcebtxa::″s″<<e<<(shnee)tbx<as<ea(<8<)<e<ndal<; <e以nnd进l; 制/形/以//式以十输八六出进进(制制n形形的式式取输输值出出,整整8数,数1a0a,16)
cout<<″x2=″<<(-b-sqrt(disc))/(2*a)<<endl;} return 0; }
东南大学软件学院(苏州 ) C++程序设计
二、标准输入输出(格式控制)
1.##使iinn用cclluu控ddee制<<ii符oosm控traen制aipm格>>//式不要忘记包含此头文件
using namespace std;
第10章 C++语言的输入与输出-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

设置状态标志flags 清楚状态标志,并返回前状态标志 测试状态标志 设置标志flags, 并返回前状态标志 返回当前的宽度设置值 设置域宽w,返回以前的设置 设置小数位数p,返回以前的小数位数 返回当前的填充字符 设置填充字符ch,返回当前的填充字符
13
下面分别介绍这些成员函数的使用方法;
(1)设置状态标志:
cout<<”x_width=”<<cout.width( )<<endl; cout<<”x_fill=”<<cout.fill ( )<<endl; cout<<”x_precision=”<<cout.precision( )<<endl; cout<<123<<” ”<<123.45678<<endl; cout<<”______________________________\n”; cout<<”*** x_width=10,x_fill=, x_precision=4 ***\n”; cout.width(10); cout.precision(4); cout<<123<<” ”<<123.45678<<” ”<<234.567<<endl;
1. C++的流概述 ❖ 在C++中,输入输出流被定义为类,称为流类。 ❖ I/O 系 统 仍 然 是 以 字 节 流 的 形 式 实 现 的 , 流
(Stream)实际上就是一个字节序列,流总是 与某一设备相联系的,它既可以从输入设备 (如键盘、磁盘等)流向计算机内存,亦可以 从计算机内存流向输出设备(如显示器、打印 机、磁盘等)。 ❖ 输入输出的字节可以是ASCII字符、内部格式 的原始数据、图形图像、数字音频、视频等。
C语言程序设计教程(电子教案)

学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。
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函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 };
10.1.1 预定义流
1.cout . 输出流类中定义有对左移操作符<<重载的一 在 ostream输出流类中定义有对左移操作符 重载的一 输出流类中定义有对左移操作符 组公用成员函数,函数的具体声明格式为: 组公用成员函数,函数的具体声明格式为: ostream& operator<<(简单类型标识符); (简单类型标识符) 2.cin . 输入流类中定义有对右移操作符>>重载的一组 在istream输入流类中定义有对右移操作符 重载的一组 输入流类中定义有对右移操作符 公用成员函数,函数的具体声明格式为: 公用成员函数,函数的具体声明格式为: istream& operator>>(简单类型标识符 ); (简单类型标识符&)
3.cerr . cerr类似标准错误文件。cerr与cout的差别在于: 类似标准错误文件。 的差别在于: 类似标准错误文件 与 的差别在于 不能重定向。 (1)cerr不能重定向。 ) 不能重定向 不能被缓冲, (2)cerr不能被缓冲, 它的输出总是直接传达到标准输 ) 不能被缓冲 出设备上。 出设备上。 4.clog . clog是不能重定向的,但是可以被缓冲。在某些系统中, 是不能重定向的, 是不能重定向的 但是可以被缓冲。在某些系统中, 由于缓冲,使用clog代替 代替cerr可以改进显示速度。 可以改进显示速度。 由于缓冲,使用 代替 可以改进显示速度 clog << "Error" << "\n";
C++中把数据之间的传输操作称作流。在C++ 中把数据之间的传输操作称作流。 中把数据之间的传输操作称作流 中,流既可以表示数据从内存传送到某个载体 或设备中,即输出流; 或设备中,即输出流;也可以表示数据从某个 载体或设备传送到内存缓冲区变量中, 载体或设备传送到内存缓冲区变量中,即输入 在进行I/O操作时 首先打开操作, 操作时, 流。在进行 操作时,首先打开操作,使流和 文件发生联系, 文件发生联系,建立联系后的文件才允许数据 流入或流出,输入或输出结束后, 流入或流出,输入或输出结束后,使用关闭操 作使文件与流断开联系。 作使文件与流断开联系。
long flags(long f);//重新设置格式状态字为 的值,返回此前的格式状态字 重新设置格式状态字为f的值 重新设置格式状态字为 的值, int good(); //操作正常时返回非 值,当操作出错、失败和读到文件 操作正常时返回非0值 当操作出错、 操作正常时返回非 //结束符时均为不正常,则返回0 结束符时均为不正常,则返回 结束符时均为不正常 int precision(); //返回浮点数输出精度,即输出的有效数字的位数 返回浮点数输出精度, 返回浮点数输出精度 int precision(int n); //设置浮点数的输出精度为 ,返回此前的输出精度。系统预设 设置浮点数的输出精度为n,返回此前的输出精度。 设置浮点数的输出精度为 //置的输出精度为 ,即输出的浮点数最多具有 位为有效数字 置的输出精度为6,即输出的浮点数最多具有6位为有效数字 置的输出精度为 int rdstate(); //操作正常时返回 ,否则返回非0值,它与good()正好相反 操作正常时返回0,否则返回非 值 它与 正好相反 操作正常时返回 long setf(long f); //根据参数 设置相应的格式化标志,返回此前的设置。该参数 根据参数f设置相应的格式化标志 根据参数 设置相应的格式化标志,返回此前的设置。 // f所对应的实参为无名枚举类型中的枚举常量(又称格式化常 所对应的实参为无名枚举类型中的枚举常量( 所对应的实参为无名枚举类型中的枚举常量 //量),可以同时使用一个或多个常量,每两个常量之间要用按位或 可以同时使用一个或多个常量, 量 //操作符连接。如需要左对齐输出,并使数值中的字母大写时, 操作符连接。 操作符连接 如需要左对齐输出,并使数值中的字母大写时, //则调用该函数的实参为 则调用该函数的实参为ios::left | ios::uppercase 则调用该函数的实参为
第10章 流类库与输入输出 章
10.1 10.2 10.3 10.4 I/O标准流类 标准流类 格式化I/O 格式化 文件流 字符串流
10.1 I/O标准流类 标准流类
预定义流 10.1.2 C++中的流类库 中的流类库
返回首页
语言中, 在C++语言中,数据的输入和输出(简写为 ) 语言中 数据的输入和输出(简写为I/O) 包括对标准输入设备键盘和标准输出设备显示 器 、 对在外存磁盘上的文件和对内存中指定的 字符串存储空间进行输入输出这三个方面。 字符串存储空间进行输入输出这三个方面 。 对 标准输入设备和标准输出设备的输入输出简称 为标准I/O, 为标准 ,对在外存磁盘上文件的输入输出简 称为文件I/O, 称为文件 ,对内存中指定的字符串存储空间 的输入输出简称为串I/O。 的输入输出简称为串 。
返回本节
10.1.2 C++中的流类库 中的流类库
C++语言系统为实现数据的输入和输出定义了一个庞大的类库, 语言系统为实现数据的输入和输出定义了一个庞大的类库, 语言系统为实现数据的输入和输出定义了一个庞大的类库 它 包 括 的 类 主 要 有 ios,istream,ostream,iostream, , , , , ifstream,ofstream,fstream,istrstream,ostrstream , , , , 和 strstream等。 等 其中ios为根基类, 它直接派生四个类 : 输入流类 为根基类, 其中 为根基类 它直接派生四个类:输入流类istream、输出 、 流 类 ostream、 文 件 流 基 类 fstreambase 和 字 符 串 流 基 类 、 strstreambase,输入文件流类 ,输入文件流类ifstream同时继承了输入流类和文 同时继承了输入流类和文 件流基类(当然对于根基类是间接继承),输出文件流类 ofstream同时继承了输出流类和文件流基类 , 输入字符串流类 同时继承了输出流类和文件流基类, 同时继承了输出流类和文件流基类 istrstream同时继承了输入流类和字符串流基类, 输出字符串流 同时继承了输入流类和字符串流基类, 同时继承了输入流类和字符串流基类 同时继承了输出流类和字符串流基类, 类ostrstream同时继承了输出流类和字符串流基类,输入输出流 同时继承了输出流类和字符串流基类 同时继承了输入流类和输出流类, 类iostream同时继承了输入流类和输出流类,输入输出文件流类 同时继承了输入流类和输出流类 fstream同时继承了输入输出流类和文件流基类,输入输出字符串 同时继承了输入输出流类和文件流基类, 同时继承了输入输出流类和文件流基类 流类strstream同时继承了输入输出流类和字符串流基类。 同时继承了输入输出流类和字符串流基类。 流类 同时继承了输入输出流类和字符串流基类
返回本节
10.2.2 使用 成员函数 使用ios成员函数
ios类提供成员函数对流的状态进行检测和进行输入输出格式控制等操 类提供成员函数对流的状态进行检测和进行输入输出格式控制等操 作,每个成员函数的声明格式和简要说明如下: 每个成员函数的声明格式和简要说明如下: int bad(); //操作出错时返回非 值 操作出错时返回非0值 操作出错时返回非 int eof(); //读取到流中最后的文件结束符时返回非 值 读取到流中最后的文件结束符时返回非0值 读取到流中最后的文件结束符时返回非 int fail(); //操作失败时返回非 值 操作失败时返回非0值 操作失败时返回非 void clear(); //清除 清除bad,eof和fail所对应的标志状态,使 所对应的标志状态, 清除 , 和 所对应的标志状态 之恢复为正常状态 //值0,使good标志状态恢复为 标志状态恢复为1 值 , 标志状态恢复为 char fill(); //返回当前使用的填充字符 返回当前使用的填充字符 char fill(char c); //重新设置流中用于输出数据的填充字 重新设置流中用于输出数据的填充字 符为c的值 的值, 符为 的值,返回 //此前的填充字符。系统预设置填充字符为空格 此前的填充字符。 此前的填充字符 long flags(); //返回当前用于 返回当前用于I/O控制的格式状态字 返回当前用于 控制的格式状态字