实验十一 流类库与输入/输出

合集下载

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

《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版课件

流类库和输入输出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页。

输入输出流类库01

输入输出流类库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++实验报告流类库与输入输出

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++:流类库与输入输出

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,将从输入设备输入的两个 变量的值输出。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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输出字符到文件。

相关文档
最新文档