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

合集下载

流类库和输入输出C程序设计第2版课件

流类库和输入输出C程序设计第2版课件
ifstream ifile("test"); //打开test文件用于读,即输入
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

流类库与输入输出-精品.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;

输入输出流.正式版PPT文档

输入输出流.正式版PPT文档
第章输入输出流
9.1 概述
C++用流(stream)的概念描述数据的输入 输出,流是计算机中的数据从源头移动到目 的地的这种过程的抽象。
流具有很强的方向性,与输入设备相联系的 流称为输入流,与输出设备相联系的流称为 输出流,与输入输出设备相联系的流称为输 入输出流。
流操作
对流的基本操作有两种,从流中获得数 据称为提取操作,向流中添加数据称 为插入操作。C++语言用流对象来管 理流,流对象一般都与某种设备相联 系,程序员通过操纵流对象,达到控 制输入输出的目的。
c1=cin.get(); cin.get(c2); cin.get(a,21,’#’);
成员函数getline
istream& getline(char *s,int n,char ch=’\n’);
char a[80]; cin.getline(a,21,’#’);
读取控制成员函数
函数原型
9.3 输入流
istream类提供了数据流输入的功能,在程序里可 以不断地从流对象中提取数据,存入相应的变量 中。
输入时使用的istream流对象通常是cin,有4种基 本操作方式。第1种是用流提取运算符,读入基本 类型的数据;第2种是用成员函数get,读入一个 字符或者字符串;第3种是用成员函数getline, 读入一个字符串;第4种是用成员函数read,读 入一串指定数量的字符。
பைடு நூலகம்
说明
int gcount(void) const
istream& ignore(int n=1,int d=EOF)
istream& putback(char ch)
int peek(void)

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第12章-IO流类库PPT课件

C第12章-IO流类库PPT课件

void main()
{ cout.put('B').put('E').put('I').put('J').put('I').put('N').put('G').put('\n');
char *str="I love BEIJING!";
cout<<"The string is "<<str<<endl;
cout.write(const char *str,int n);
str是一个字符指针或字符数组名,用来存放 一个字符串,也可以是字符串常量; n用来指定输出字符串中字符的个数。
-
7
[例13.1]分析下列程序的输出结果,熟悉put()和write()函数的 用法。程序内容如下:
#include <iostream.h>
插入运算符可连续使用,但应注意计算顺序。 系统指定标准输出设备屏幕的对象为cout,将 输出流显示在屏幕上的格式如下: cout << <表达式1> << <表达式2> <<…… ;
使用中应注意<表达式>中运算符的优先级。
-
5
13.1.2 使用成员函数put()输出一个字符 成员函数put()的格式如下: ostream& cout.put(char c);
#include <string.h> void print(char *s) { cout.write(s,strlen(s)).put('\n');

c++流类库与输入输出习题答案

c++流类库与输入输出习题答案

1.概念填空题1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。

其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。

1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。

1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。

C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。

1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。

前者存取的最小信息单位为字节,后者记录。

1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。

文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。

1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。

文本文件的输出可用cout将字符插入到输出文件流来实现。

程序在处理文本文件时需要(需要/不需要)对数据进行转换。

1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。

二进制文件的输入输出分别采用read()、write() 成员函数。

这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。

1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。

2 简答题2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数?2.2 文件的使用有它的固定格式,试做简单介绍。

2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式?2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。

2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题?2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件?2.7 怎样使用istream和ostream的成员函数来实现随机访问文件?3.选择题3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。

输入输出流类库

输入输出流类库

流动
故将输入/输出操作的类体系称为流类,提供这个流类实现的 系统称为流类库。
2019/4/25
2
概述
两套方法: •与C语言兼容的输入/输出库函数 •输入/输出流类库
建议使用
流(Stream)
什么是流是有向的数据流动的抽象描述,是数据流动的 渠道和方向,是程序与输入/输出设备的连接桥梁。如:
cin >> name; //从流对象(键盘)读数据放入变量中
12
流的格式控制
标准输入/输出流的不足之处: •整型变量输入的数只能是十进制、八进制、十六进制; •只能用十进制数输出整数; •制表输出数据不能指定每个输出的数据占用的宽度。
流的格式化输入/输出可解决,但只适用于文本流。 介绍常用的格式控制方法。
2019/4/25
13
控制输入/输出格式的目的
进行不同进制之间的转换:8进制、16进制等 精度的控制:小数点的位数等 输入/输出的宽度控制。如:是输出100,还是 100 格式之间的状态转换
setfill(int)
设置填充字符
setprecision(int) 设置实数的精度
setw(int)
设置宽度
20e1n9d/4s/25
插入一个表示字符串结束的 NULL字符
适用于输入、输出流 I/O I/O I/O I O O I/O I/O O O O
15
例2:使用格式控制函数实现指定域宽和数制。
cout << my name is << name << endl; //将数据写到流对象(屏幕)中
2019/4/25
3
输出设备
文件
程序
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

设置及清除格式状态标志格式状态标志说明ios::skipws跳过输入中的空白,用于输入ios::left左对齐输出,用于输出ios::right右对齐输出,用于输出ios::internal在符号和数值之间填充字符,用于输出ios::dec转换基数为十进制,用于输入或输出ios::oct转换基数为八进制,用于输入或输出ios::hex转换基数为十六进制,用于输入或输出ios::showbase输出时显示基指示符(0表示八进制,0x或0X表示十六进制),用于输入或输出ios::showpoint输出时显示小数点,用于输出ios::uppercase输出时表示十六进制的x为大写,表示浮点数科学计数法的e为大写,用于输出ios::showpos正整数前显示“+”符号,用于输出ios::scientific用科学表示法显示浮点数,用于输出ios::fixed用定点形式显示浮点数,用于输出ios::unitbuf在输出操作后立即刷新所有流,用于输出ios::stdio在输出操作后刷新stdout和stderr,用于输出图12.2 格式状态标志是,使状态标志字二进制表示中的不同位为1,它们共同组成状态标志字,存放在数据成员long x_flags中。

在设置格式状态时可以通过按位或(|)运算将多个标志选项组合在一个long int型的值中。

②设置状态标志使用成员函数setf设置参数所指定的格式标志,并返回long int型的标志设置值。

一般调用形式为:流对象.setf(格式状态标志);③清除状态标志使用成员函数unsetf清除指定的标志并返回清除前的标志值。

一般调用形式为:流对象.unsetf(格式状态标志);④取状态标志用成员函数flag,其不带参数时返回格式状态标志的当前设置(long int型值);带参数时按参数指定的格式设置标志,返回以前的标志设置值。

一般调用形式为:流对象.flags();流对象.flags(格式状态标志);注意:flags()与setf()的区别是:setf()是在原有的基础上追加设置,不改变原有设置;flags()使用新的设置覆盖原有的设置,改变了原有设置。

设置域宽域宽是指输出字符的长度。

用成员函数width()完成域宽的设置。

一般调用形式为:流对象.width();流对象.width(int w);说明:①不带参数时返回当前的域宽值;②带参数时将域宽值设置为w,并返回设置前的域宽值。

设置填充字符当输出值长度小于域宽时将剩余部分用设定的填充字符填满,缺省的填充字符为空格。

用成员函数fill设置填充字符。

一般调用形式为:流对象.fill();流对象.fill(char ch);说明:①不带参数时返回当前的填充字符;②带参数时将填充字符设置为ch,并返回设置前的填充字符。

③使用填充字符函数时,必须与设置域宽函数配合使用,否则没有意义。

设置输出精度用函数precision()设置浮点数输出时的显示精度。

一般调用形式为:流对象. precision(int p);12.2.2 用格式控制符进行格式控制预定义的格式控制符(在第二章中已介绍)。

自定义的格式控制符为输出流自定义格式控制符的一般形式为:ostream &格式控制符名(ostream &stream){//自定义代码return stream;}为输入流自定义格式控制符的一般形式为:istream &格式控制符名(istream &stream){//自定义代码return stream;}12.3 输入与输出运算符的重载定义运算符“<<”重载函数的一般形式为:ostream &operator<<(ostream &stream,类名对象名){//操作代码return stream;}定义运算符“>>”重载函数的一般形式为:istream &operator>>(istream &stream,类名&对象名){//操作代码return stream;}说明:重载输入/输出运算符函数只能为非成员函数,一般被定义为类的友元。

12.4 文件操作12.4.1 创建文件流在C++中进行文件操作,要包含<fstream.h>。

该头文件包括了ifstream(从文件输入)、ofstream(向文件输出)、fstream(从文件输入输出)流类的定义。

它们分别派生自istream、ostream、iostream。

建立文件流就是定义文件流类的对象。

如ifstream fin;ofstream fout;fstream fio;建立了流以后,就可以把某一个流与文件建立联系,进行文件的读写操作了。

12.4.2 文件的打开与关闭可以在定义文件流对象的同时完成打开文件的工作,也可在定义文件流对象以后通过open()函数完成。

open()函数是上述三个流类的成员函数,定义在fstream.h头文件中。

函数原型为:void open(const unsigned char *,int mode,int dcces=filebuf::openprot);说明:①第一个参数用来传递文件名;②第二个参数的值决定文件打开的方式,必须从下列值中选取:ios::app //使输出追加到文件尾部,只用于输出ios::ate //查找文件尾ios::in //打开一个文件进行读操作,只用于输入ios::nocreate //文件不存在,导致open()失败ios::noreplace //若文件存在,则open()失败ios::out //打开一个文件进行写操作,只用于输出ios::trunc //删除同名文件ios::binary //以二进制方式打开文件,缺省为文本方式以上各值可以组合使用,之间用“|”分开。

③第三个参数的值决定文件的访问方式及文件的类别。

一般情况下,ifstream和ofstream流类的析构函数就可以自动关闭已打开的文件,也可用函数close()关闭文件,它是流类中的成员函数,没有参数,没有发返回值。

12.4.3 文件的读写文件的顺序读写①get()函数函数原型:istream &get(unsigned char &ch);作用:它从流中每次读出一个字节或一个字符放入引用ch&中。

②put()函数函数原型:istream &put( char ch);作用:它将一个字节或一个字符写入流中。

③read()函数函数原型:istream &read(unsigned char *buf,int num);作用:从相应的流读出num个字节或字符的数据,把他们放入指针所指向的缓冲区中。

buf是一个指向读入数据存放空间的指针,num说明要读入数据的字节或字符数。

④write()函数函数原型:ostream &write(const unsigned char *buf,int num);作用:从buf所指向的缓冲区把num个字节的数据写到相应的流中。

参数的含义、调用及注意事项与read()相同。

文件的随机读写完成定位操作的函数如下:①函数seekg()函数原型:isream &seekg(streamoff offset,seek_dir origin);作用:用于输入文件,将文件的读指针从origin说明的位置移动offset个字节;②函数seekp()函数原型:osream &seekp(streamoff offset,seek_dir origin);作用:用于输出文件,将文件的写指针从origin说明的位置移动offset个字节。

说明:origin的取值由三种情况:ios::beg 从文件头开始,把文件指针移动由offset指定的距离。

ios::cur 从文件当前位置开始,把文件指针移动offset指定的距离。

ios::end 从文件尾开始,把文件指针移动由offset指定的距离。

③函数tellg()函数原型:streampos tellg();作用:用于输入文件,确定文件当前指针的位置④函数tellp()函数原型:streampos tellp();作用:用于输出文件,确定文件当前指针的位置。

【典型例题】例题1.在C++中,打开一个文件就是将一个文件与一个_________建立关联;关闭一个文件就是取消这种关联。

解答:C++的I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作。

相关文档
最新文档