第十一章 流类库与输入输出
C++语言 流类库和输入 输出

9.1 C++的基本流类体系
标准输入/输出流对象:
在C++的流类库中定义了四个全局流对象:cin, cout,cerr和clog。可以完成人机交互的功能。
cin标准输入流对象,键盘为其对应的标准设备。 cout标准输出流对象,显示器为标准设备。 cerr和clog标准错误输出流,输出设备是显示器。 其中cin、cout和clog是带缓冲区的,缓冲区由 streambuf类对象来管理。而cerr为非缓冲区流,一旦 错误发生立即显示。 要使用这四个功能,必须包含<iostream>文件。
cin使用提取运算符。 cout、cerr和clog使用插入运算符。
文件:
文件处理完成永久保存的功能。
在Windows下不同的C++平台,都为文件功能作了扩充, 在VC++的MFC编程中采用了序列化(Serialization)。
9.2 输入输出的格式控制(选读)
格式控制符:
C++在类ios_base中提供格式化输入输出。这些格式 是对所有文本方式的输入输出流均适用。格式控制符 定义为公有的无名枚举类型,在VC++6.0中定义为:
流类库和输入/输出
本章的最主要目的就是把对象保存到磁盘文件中并从 磁盘文件重建对象。
C++语言中并没有输入/输出语句,而是在标准库 里包含了一个I/O流类库,它与标准模板库同为C++标 准库中最重要的组成部分。数据从一个对象到另一个对 象的传送被抽象为“流”。数据的输入/输出就是通过 输入/输出流来实现的。
指针 basic_ streambuf
面向对象的程序设计(C++)教学大纲

面向对象的程序设计(C++)教学大纲教学目的本课程为高级语言程序设计的入门课程,完全针对零起点的学生,可作为其他信息类相关课程的基础课。
目标是使学生通过本课程的学习,掌握面向对象程序设计的基本概念和方法、C++的基本语法和编程方法;学会使用集成开发环境;掌握程序调试方法;初步了解常用数据结构和非数值算法;初步了解C++标准模板库的使用方法。
教学任务完成《C++语言程序设计(第4版)》教材内容,及《C++语言程序设计(第4版)学生用书》中的实验内容,另有学生自主选题的大作业、选作的论文回报告。
学时:大课30、实验30、课外30、课外讨论10学时。
教学内容的结构课程由4个模块共12个教学单元组成,对应于《C++语言程序设计(第4版)》的十二章内容。
教学活动以及教学方法上的基本要求大课、实验、课外作业、自选题目的大作业、论文和报告结合,学时大课30、实验30、课外30。
另有课外讨论环节。
通过大课讲解基本原理和方法;通过实验课巩固大课内容,并在助教辅导下完成基础实验,当堂由助教验收;课外作业由学生独立完成,并提交清橙考试系统进行评分。
自选题目的大作业要在期中提交选题报告,逐一批改并给出评语,期末提交全部文档及程序并且逐一答辩。
答辩形式为:学生演示5分钟,教师提问5分钟,当即给出成绩。
论文和报告属于加分因素。
课外讨论安排在每次大课之后,加1学时,自愿参加,每人每学期至少参加一次。
内容为:教师对难点进行复习、讲解补充例题,学生提问和讨论。
模块及单元教学目标与任务模块1:程序设计基础单元1 绪论要点:●面向对象程序设计语言的产生和特点,面向对象方法的由来及其基本概念,面向对象的软件工程简介;●信息在计算机中的表示和存储,程序的开发过程。
教学任务:1.1计算机程序设计语言的发展1.2面向对象的方法1.3面向对象的软件开发1.4信息的表示与存储1.5程序的开发过程作业及实验:作业1、实验一单元2 C++简单程序设计要点:●C++语言的发展历史及其特点;●构成C++语句的基本部分—字符集、关键字、标识符、操作等;●C++的基本数据类型和自定义数据类型;●顺序、选择和循环结构。
流类库和输入输出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页。
流类库与输入输出-精品.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;
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‟);
流类库和输入输出共16页

Harbin Engineering University
第六章
流类库与输入/输出
吴良杰
I/O流的概念
C++的输入输出流是指由若干字节组成的字节序列,这些 字节中的数据按顺序从一个对象传送到另一对象。
流是一种抽象,它负责在数据的生产者和数据的消费者之 间建立联系,并管理数据的流动。
读操作在流数据抽象中被称为(从流中)提取,写操作被 称为(向流中)插入。
#include <iostream.h> #include <fstream.h> void main() {char s[20]; ifstream outf("e:\\a1.txt"); outf>>s; cout<<s; outf.close(); }
哈尔滨工程大学课件
文件流
文件的关闭 文件流对象.close();
哈尔滨工程大学课件
文件流
文件ቤተ መጻሕፍቲ ባይዱ读、写 写文件:文件流对象<<输出内容; 读文件:文件流对象>>变量;
#include <iostream.h> #include <fstream.h> void main() {ofstream outf
outf.open("e:\\a1.txt"); outf<<"abcdefghijk" outf.close(); }
哈尔滨工程大学课件
文件流
打开文件 文件流对象.open(文件名,文件访问方式) 访问方式: ios::out ios::app ios::binary ios::in ... 默认打开方式: ifstream类的文件:ios::in ofstream类的文件:ios::out
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"
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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类重载了操作符“<<”(插入),用它可以进行基本数据类型数据的输出操作。
例如:ostream out(...);out << e1; //e1是一个表达式out << e2; //e2是一个表达式或I/O的分类⏹基于控制台的I/O:◆从标准输入设备(如:键盘)获得数据◆把程序结果从标准输出设备(如:显示器)输出⏹基于文件的I/O:◆输入:从外存文件获得数据◆输出:把程序结果保存到外存文件中控制台I/O⏹在I/O类库中预定义了四个I/O对象:cin、cout、cerr以及clog,可以直接利用这些对象进行控制台的输入/输出操作:◆cin属于istream类的对象,它对应着计算机系统的标准输入设备,如键盘;◆cout属于ostream类的对象,它对应着计算机系统的用于输出程序正常运行结果的标准输出设备,如显示器;◆cerr和clog属于ostream类的对象,它们对应着计算机系统的用于输出程序错误信息的设备,通常情况下它们都对应着显示器;⏹在进行控制台输入/输出时,程序中需要有下面的包含命令:#include<iostream>输出流⏹最重要的三个输出流是◆ostream◆ofstream◆ostringstream输出流对象⏹预先定义的输出流对象:◆cout 标准输出◆cerr 标准错误输出,没有缓冲,发送给它的内容立即被输出。
◆clog 类似于cerr ,但是有缓冲,缓冲区满时被输出。
输出流输出流对象⏹使用cout 可以进行标准输出,如果要将信息输出到文件,需要建立流对象。
⏹ofstream 类支持磁盘文件输出,常用方法:1.定义一个ofstream 类对象时指定一个文件名,则该文件在创建对象时自动打开:ofstream myFile("filename",iosmode);2.可以定义一个ofstream 类对象,然后使用open 成员函数打开一个文件:ofstream myFile;//定义一个静态文件输出流对象myFile.open("filename",iosmode);//打开文件,使流对象与文件建立联系输出流使用插入运算符和操纵符⏹插入(<<)运算符是所有标准C++数据类型预先设计的。
⏹用于传送字节到一个输出流对象。
输出流输出格式控制⏹控制输出宽度◆setw、width⏹控制对齐方式◆setiosflages(ios_base::left) 默认为右对齐文本⏹控制输出精度◆setprecision 浮点数输出精度默认值是6⏹控制输出数据的进制◆dec oct hex 默认是dec需要包含文件iomanip控制输出格式⏹控制输出宽度◆为了调整输出,可以通过在流中放入setw 操纵符或调用width 成员函数为每个项指定输出宽度。
⏹例11-1 使用width 控制输出宽度#include <iostream>using namespace std;int main(){ double values[] = {1.23,35.36,653.7,4358.24};for(int i=0;i<4;i++){ cout.width(10);cout << values[i] <<'\n';}}输出流输出结果(右对齐):1.2335.36653.7例:使用*填充#include <iostream> using namespace std; int main(){ double values[]={1.23,35.36,653.7,4358.24};for(int i=0; i<4; i++){ cout.width(10);cout.fill('*');cout<<values[i]<<'\n'; }}输出流输出结果:******1.23*****35.36*****653.7***4358.24例11-2使用setw 指定宽度#include <iostream> #include <iomanip> using namespace std;int main(){ double values[]={1.23,35.36,653.7,4358.24};char *names[]={"Zoot","Jimmy","Al","Stan"};for(int i=0;i<4;i++)cout<<setw(6)<<names[i]<<setw(10)<<values[i]<<endl; }输出流输出结果:Zoot 1.23Jimmy 35.36Al 653.7Stan 4358.24例11-3设置对齐方式#include <iostream>#include <iomanip>using namespace std;int main(){ double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++)cout<<setiosflags(ios::left)<<setw(6)<<names[i] <<resetiosflags(ios::left) <<setw(10)<<values[i] <<endl;}输出结果:Zoot 1.23 Jimmy 35.36 Al 653.7 Stan 4358.24例11-4控制输出精度#include <iostream>#include <iomanip>using namespace std;int main(){ double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; cout<<setiosflags(ios::scientific);for(int i=0;i<4;i++)cout<<setiosflags(ios::left)<<setw(6)<<names[i]<<resetiosflags(ios::left)<<setw(10)<<setprecision(1) << values[i]<<endl;}输出结果:Zoot 1.2e+000 Jimmy 3.5e+001 Al 6.5e+002 Stan 4.4e+003进制⏹dec 、oct 和hex 操纵符设置输入和输出的默认进制。
⏹默认进制是dec (十进制)。
输出流文件输出流成员函数⏹输出流成员函数有三种类型:◆与操纵符等价的成员函数。
◆执行非格式化写操作的成员函数。
◆其它修改流状态且不同于操纵符或插入运算符的成员函数。
输出流文件输出流成员函数⏹open 函数把流与一个特定的磁盘文件关联起来。
需要指定打开模式。
⏹close 函数关闭与一个输出文件流关联的磁盘文件⏹put 函数把一个字符写到输出流中。
⏹write 函数把内存中的一块内容写到一个输出文件流中⏹seekp 和tellp 函数操作文件流的内部指针⏹错误处理函数在写到一个流时进行错误处理输出流例11-5向文件输出#include <fstream>using namespace std;struct Date{ int mondy, day, year; };int main(){Date dt = {6, 10, 92};ofstream tfile("date.dat",ios::binary); tfile.write((char *) &dt,sizeof dt);tfile.close();}二进制输出文件⏹默认的输出模式是文本方式⏹可以用二进制模式输出◆其中所写的字符不转换◆需要在打开文件时设置打开模式为:Ios_base::binary字符串输出流ostringstream⏹用于构造字符串⏹功能◆支持ofstream 类的除open 、close 外的所有操作◆str 函数可以返回当前已构造的字符串⏹典型应用◆将数值转换为字符串输出流例11-6 字符串输出流应用#include <iostream>#include <sstream>#include <string>using namespace std;template <class T>inline string toString(const T &v) {ostringstream os;//创建字符串输出流os << v;//将变量v 的值写入字符串流return os.str();//返回输出流生成的字符串}int main() {string str1 = toString(5);cout << str1 << endl;string str2 = toString(1.2);cout << str2 << endl;输出流输出结果:51.2输入流⏹重要的输入流类:◆istream类最适合用于顺序文本模式输入。