实验十一 流类库与输入/输出
《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程序设计第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页。
输入输出流类库01
第十四章输入/输出流类库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++实验报告流类库与输入输出
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++:流类库与输入输出
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类重载了操作符“<<”(插入),用它可以进行基本数据类型数据的输出操作。
C++语言程序设计第9章 流类库与输入输出
• 【例9.1】 cout 、cerr区别。
#include <iostream> #include<stdlib.h> using namespace std; int main() { cout<<"hello "<<endl; cerr<<"hello world"<<endl; system("pause"); }
• 将例9-1编译形成项目可执行文件9_1.exe,在命令提示符状态 分别输入两个命令: • “9_1 >t1.txt”和“9_1 2>t2.txt”,分别查看t1.txt和t2.txt可 以看出不同。
9.2.1 插入运算符(<<)和操纵符
• 插入(<<)运算符是所有标准C++数据类型预先设计的,用 于传送字节到一个输出流对象。 • 很多情况下,程序员需要控制输入输出格式。C++提供了 两种格式控制方法:一种方法是使用ios类中有关格式控 制的成员函数;另一种是使用预先定义的操纵符一起工作 。下面重点讲述操纵符。 • C++预定义的操纵符分为带参数的操纵符和不带参数的操 纵符。通常,不带参数的操纵符在iostream文件中,而带 参数的操纵符在iomanip文件中定义。在进行输入输出时 ,操纵符被嵌入到输入或输出链中,用来控制输入输出的 格式。程序中如果使用带参数的操纵符,还必须使用预编 译命令: • #include <iomanip>
• 程序运行时,在内存中为每一个数据流开 辟一个内存缓冲区,用来存放流中的数据 。例如当用cout和插入运算符“<<”向显 示器输出数据时,先将数据送入内存输出 缓冲区保存,直到缓冲区满了或遇到endl, 就将缓冲区中的全部数据送到显示器显示 ;当用cin和提取运算符“>>”从键盘输入 数据时,键盘输入的数据先放着键盘的缓 冲区中,当按回车键时,键盘缓冲区中的 数据送入内存输入缓冲区形成cin流,然后 提取运算符“>>”从输入缓冲区提取数据 送给程序中的变量。
第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-流类库与输入输出
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"
C++程序设计语言揣锦华第9章流类库与输入输出
float fNumber;
inS>>iNumber>>fNumber; 和浮点数
//从串流中读入一个整数
char*Buf1=new char[28];
ostrstream outS(Buf1,28);
outS<<"iNumber="<<iNumber
<<",fNumber="<<fNumber<<endl;
第9章 流类库与输入/输出
打开一个输出文件,用于在文件尾添加数据 打开一个现存文件(用于输入或输出)并查找到结尾 打开一个输入文件。对于一个ofstream文件,使用 ios::in作为一个openmode,可避免删除一个现存文件中 现有的内容 打开一个文件,用于输出。对于所有ofstream对象, 此模式是隐含指定的 如果一个文件存在,则打开它;否则该操作失败
第9章 流类库与输入/输出
9.4 控制符
9.4.1 使用流对象的成员函数 【例9-3】 使用width成员函数控制输出宽度。
#include <iostream.h> void main( ) { double values[ ]={1.44,36.47,625.7,4096.24}; for(int i=0;i<4;i++) {
return Buf1;
第9章 流类库与输入/输出
} 程序运行结果为
iNumber=100,fNumber=123.456 分析:在函数ioString( )中,以pString为输入设备, 先定义一个输入串流对象inS,从中输入一个整数和一 个浮点数。再开辟一个字符串空间作为输出设备,定 义一个输出串流对象outS,将从输入设备输入的两个 变量的值输出。
第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++流类库与输入输出习题答案
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章流类库和输入输出【内容提要】流的概念及流类库输入输出的格式控制输入与输出运算符的重载文件操作【重点与难点】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; }
面向对象程序设计(4.2.3)--流类库与输入输出实验
实验十一 流类库与输入/输出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. 编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
输入输出流类库
流动
故将输入/输出操作的类体系称为流类,提供这个流类实现的 系统称为流类库。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十一流类库与输入/输出(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输出字符到文件。