实验十一 流类库与输入/输出
- 格式:doc
- 大小:30.50 KB
- 文档页数:2
第十四章输入/输出流类库1用标准流进行输入/输出时,系统自动地完成数据类型的转换。
对于输入流,要将输入的字符序列形式的数据变换成计算机内部形式的数据(二进制或ASCII)后,再赋给变量,变换后的格式由变量的类型确定。
对于输出流,将要输出的数据变换成字符串形式后,送到输出流(文件)中。
4如何使文件类的对象与欲操作的文件发生联系?用对象打开文件:ifstream infile; //定义输入文件类对象myfile1.txt””);//利用函数打开某一文件infile.open(““myfile1.txtinfile.open(打开文件的作用是,使文件流对象与要使用的文件名之间建立联系。
ofstream outfile; //定义输出文件类对象myfile1.txt””);//打开某一文件供输出outfile.open(outfile.open(““myfile1.txt19myfile1.txt””);infile.open(““myfile1.txtinfile.open(打开文件“myfile1.txtmyfile1.txt””用于输入,并将这个文件与输入文件类对象infile建立联系,今后,在程序中,用到这个文件“myfile1.txtmyfile1.txt””的地方就用infile来代替。
myfile2.txt””);outfile.open(outfile.open(““myfile2.txt打开文件“myfile2.txtmyfile2.txt””用于输出,并将这个文件与输出文件类对象outfile建立联系,今后,在程序中,用到这个文件“myfile2.txtmyfile2.txt””的地方就用outfile来代替。
20。
C++实验报告流类库与输入/输出实验八流类库与输入/输出(2学时)一.实验目的:1.熟悉流类库中常用的类及其成员函数使用方法;2.学习标准输入输出及格式控制;3.学习对文件的应用方法(二进制文件,文本文件)二.实验内容与步骤:1.实验题目:(2):编写程序,用二进制方式打开指定的一个文件,在每一行前加行号.(提示:使用void main(int argc,char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作.使用getline成员函数读入数据,使用cout输出字符到文件.)2.程序清单:#include<fstream>#include<strstream>#include<cstdlib>using namespace std;void main(){strstream file;ifstream in("f1.txt",ios::binary);file<<in.rdbuf();ofstream out("f1.txt",ios::binary);const int s=255;char l[s];for(int i=1;file.getline(l,s);i++)out<<i<<"."<<l<<endl; }3.测试结果如下:三.实验小结:1,重要的输出流:ostream,ofstream,ostringstream;2,重要的输入流:istream,ifstream,istringstream.。
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流的概念及流类库结构●输出流●输入流●输入/输出流输入/输出(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.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类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。
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 )。
第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类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。
实验十一 流类库与输入/输出1、 实验目的1. 熟悉流类库中常用的类及其成员函数的用法。
2. 学习标准输入输出及格式控制;3. 学习对文件的应用方法(二进制文件、文本文件)。
2、 实验任务1. 观察以下程序的输出,注意对输出格式的控制方法;//lab11_1.cpp#include <fstream>using namespace std;#define D(a) T << #a << endl; aofstream T("output.out");int main() {D(int i = 53;)D(float f = 4700113.141593;)char* s = "Is there any more?";D(T.setf(ios::unitbuf);)D(T.setf(ios::showbase);)D(T.setf(ios::uppercase);)D(T.setf(ios::showpos);)D(T << i << endl;)D(T.setf(ios::hex, ios::basefield);)D(T << i << endl;)D(T.unsetf(ios::uppercase);)D(T.setf(ios::oct, ios::basefield);)D(T << i << endl;)D(T.unsetf(ios::showbase);)D(T.setf(ios::dec, ios::basefield);)D(T.setf(ios::left, ios::adjustfield);)D(T.fill('0');)D(T << "fill char: " << T.fill() << endl;)D(T.width(8);)T << i << endl;D(T.setf(ios::right, ios::adjustfield);)D(T.width(8);)T << i << endl;D(T.setf(ios::internal, ios::adjustfield);)D(T.width(8);)T << i << endl;D(T << i << endl;) // Without width(10)D(T.unsetf(ios::showpos);)D(T.setf(ios::showpoint);)D(T << "prec = " << T.precision() << endl;) D(T.setf(ios::scientific, ios::floatfield);)D(T << endl << f << endl;)D(T.setf(ios::fixed, ios::floatfield);)D(T << f << endl;)D(T.setf(0, ios::floatfield);)D(T << f << endl;)D(T.precision(16);)D(T << "prec = " << T.precision() << endl;) D(T << endl << f << endl;)D(T.setf(ios::scientific, ios::floatfield);)D(T << endl << f << endl;)D(T.setf(ios::fixed, ios::floatfield);)D(T << f << endl;)D(T.setf(0, ios::floatfield);)D(T << f << endl;)D(T.width(8);)T << s << endl;D(T.width(36);)T << s << endl;D(T.setf(ios::left, ios::adjustfield);)D(T.width(36);)T << s << endl;D(T.unsetf(ios::showpoint);)D(T.unsetf(ios::unitbuf);)}2. 编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
实验十一流类库与输入/输出(2学时) 一、实验目的
1.熟悉流类库中常用的类及其成员函数的用法。
2.学习标准输入输出及格式控制。
3.学习对文件的应用方法(二进制文件、文本文件)。
二、实验任务
1.观察以下程序的输出,注意对输出格式的控制方法;
//labll—1.cpp
#include<fstream>
Using namespace std;
#define D(a)<<#a<<endl;a
ofstream T("output.out”)。
void main(){
D(int i=53;)
D(float f=4700113.141593;)
Char*S=”Is there any more?”;
D(T.setf(ios::unitbuf);)
D(T.setf(ios::showbase);)
D(T.setf(ios::uppercase);)
D(T.setf(ios::showpos);)
D(T<<i<<endl;)
D(T.setf(ios::hex,iOS::basefield);)
D(T<<i<<endl;)
D(T.unsetf(ios::uppercase);)
D(T.setf(ios::oct,iOS::basefield);)
D(T<<i<<endl;)
D(T.unsetf(ios::showbase);)
D(T.setf(ios::dec,iOS::basefield);)
D(T.serf(ios::1eft,iOS::adjustfield);)
D(T.fill(’O’);)
D(T<<”fill char:”<<T.fill()<<endl;)
D(T.width(8);)
T<<i<<endl;
D(T.setf(ios::right,ios::adjustfield);)
D(T.width(8);)
T<<i<<endl;
D(T.setf(ios::internal,ios::adjustfield);)
D(T.width(8);)
T<<i<<endl;
D(T<<i<<endl;)∥Without width(1 O)
D(T.unsetf(ios::showpos);)
D(T.serf(ios::showpoint);)
D(T<<”prec=”<<T.precision()<<endl;)
D(T.setf(ios::scientific,iOS::floatfield);)
D(T<<endl<<f<<endl;)
D(T.setf(ios::fixed,iOS::floatfield);)
D(T<<f<<endl;)
D(T.setf(0,iOS::floatfield);)∥Automatic
D(T<<f<<endl;)
D(T.precision(1 6);)
D(T<<”prec=”<<T.precision()<<endl;)
D(T<<endl<<f<<endl;)
D(T.setf(ios::scientific,iOS::floatfield);)
D(T<<endl<<f<<endl;)
D(T.setf(ios::fixed,iOS::floatfield);)
D(T<<f<<endl;)
D(T.setf(0,iOS::floatfield);)∥Automatic
D(T<<f<<endl;)
D(T.width(8);)
T<<s<<endl;
D(T.width(3 6);)
T<<s<<endl;
D(T.setf(ios::1eft,iOS::adjustfield);)
D(T.width(36);)
T<<s<<endl;
D(T.unsetf(ios::showpoint);)
D(T.unsetf(ios::unitbuf);)
)
2.编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
3.(选做)使用实验1 0中的学生类数组,输入数据并显示出来,使用I/O流把此数组的内容写入磁盘文件,再显示出文件内容。
三、实验步骤
1.观察题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;
2.编写程序labll_2.cpp。
使用void main(int argc,char * argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用getline成员函数读人数据,使用cout输出字符到文件。