最新c++课件第十三章 输入输出流1.docx

上传人:b****5 文档编号:4442101 上传时间:2022-12-01 格式:DOCX 页数:41 大小:261.74KB
下载 相关 举报
最新c++课件第十三章 输入输出流1.docx_第1页
第1页 / 共41页
最新c++课件第十三章 输入输出流1.docx_第2页
第2页 / 共41页
最新c++课件第十三章 输入输出流1.docx_第3页
第3页 / 共41页
最新c++课件第十三章 输入输出流1.docx_第4页
第4页 / 共41页
最新c++课件第十三章 输入输出流1.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

最新c++课件第十三章 输入输出流1.docx

《最新c++课件第十三章 输入输出流1.docx》由会员分享,可在线阅读,更多相关《最新c++课件第十三章 输入输出流1.docx(41页珍藏版)》请在冰豆网上搜索。

最新c++课件第十三章 输入输出流1.docx

最新c++课件第十三章输入输出流1

 

c++课件第十三章 输入输出流

(1)

第13章输入输出流

13.1C++的输入和输出

13.1.1输入输出的含义

(1)对系统指定的标准设备进行输入和输出。

(2)以外存磁盘文件为对象进行输入和输出。

(3)对内存指定的空间进行输入和输出。

13.1.2C++的I/O对C的发展——类型安全和可扩展性

13.1.3C++的输入输出流

1.iostream类库中有关的类

图13.1

图13.2

图13.3

2.与iostream类库有关的头文件

iostreamfstreamstrstreamstdiostreamiomanip

3.在iostream头文件中定义的流对象

4.在iostream头文件中重载运算符

ostreamoperator<<(char*);

//用于向输出流插入一个字符串

cout<<"C++";

相当于

cout.operator<<("C++");

对于自己的类,可用11章的方法进行重载。

13.2标准输出流

13.2.1cout,cerr和clog流

1.cout流对象

(1)cout流是流向显示器的数据。

(2)输出基本类型数据时,可以不考虑数据的类型是什么。

(3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据,然后插入一个换行符,并刷新流(清空缓冲区)。

2.cerr流对象

cerr流是标准错误流。

cerr流被指定与显示器关联。

cout流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。

例13.1解一元二次方程ax2+bx+c=0

#include

#include

usingnamespacestd;

voidmain()

{

floata,b,c,disc;

cout<<"pleaseinputa,b,c:

";

cin>>a>>b>>c;

if(a==0)

cerr<<"aisequaltozero,error!

"<

else

if((disc=b*b-4*a*c)<0)

cerr<<"disc=b*b-4*a*c<0"<

else

{cout<<"x1="<<(-b+sqrt(disc))/(2*a)<

cout<<"x2="<<(-b-sqrt(disc))/(2*a)<

}

}

pleaseinputa,b,c:

023

aisequaltozero,error!

pleaseinputa,b,c:

523

disc=b*b-4*a*c<0

pleaseinputa,b,c:

12.51.5

x1=-1

x2=-1.5

3.clog流对象

clog流也是标准错误流,也是在显示器上显示出错信息。

与cerr的微小区别是:

cerr不经缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇到endl时向显示器输出。

13.2.2格式输出

1.使用控制符控制输出格式

例13.2用控制符控制输出格式

#include

#include

usingnamespacestd;

intmain()

{inta;

cout<<"inputa:

";

cin>>a;

cout<<"dec:

"<

cout<<"hex:

"<

cout<<"oct:

"<

char*pt="China";

cout<

cout<

doublepi=22.0/7.0;

cout<

:

scientific)<

cout<<"pi="<

cout<<"pi="<

cout<<"pi="<

:

fixed)<

return0;

}

inputa:

34

dec:

34

hex:

22

oct:

42

China

*****China

pi=3.14285714e+000

pi=3.1429e+000

pi=3.143

2.用流对象的成员函数控制输出格式

例13.3用流控制成员函数输出数据。

#include

usingnamespacestd;

voidmain()

{inta=21;

cout.setf(ios:

:

showbase);

cout<<"dec:

"<

cout.unsetf(ios:

:

dec);

cout.setf(ios:

:

hex);

cout<<"hex:

"<

cout.unsetf(ios:

:

hex);

cout.setf(ios:

:

oct);

cout<<"oct:

"<

char*pt="China";

cout.width(10);

cout<

cout.width(10);

cout.fill('*');

cout<

doublepi=22.0/7.0;

cout.setf(ios:

:

scientific);

cout<<"pi=";

cout.width(14);

cout<

cout.unsetf(ios:

:

scientific);

cout.setf(ios:

:

fixed);

cout.width(12);

cout.setf(ios:

:

showpos);

cout.setf(ios:

:

internal);

cout.precision(6);

cout<

}

dec:

21

hex:

0x15

oct:

025

China

*****China

pi=*3.142857e+000

+***3.142857

13.2.3用流成员函数put输出字符

put是用于输出单个字符的成员函数。

cout.put('a');

cout.put(65+32);

例13.4有一个字符串”BASIC”,要求把它按相反的顺序输出。

#include

usingnamespacestd;

intmain()

{char*a="BASIC";

for(inti=4;i>=0;i--)

cout.put(*(a+i));

cout.put('\n');

return0;

}

也可以用putchar函数实现。

#include

intmain()

{char*a="BASIC";

for(inti=4;i>=0;i--)

putchar(*(a+i));

putchar('\n');

return0;

}

13.3标准输入流

13.3.1cin流

可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。

if(!

cin)

cerr<<"error";

例13.5通过测试cin的值,判断流对象是否处于正常状态。

#include

usingnamespacestd;

voidmain()

{

floatgrade;

cout<<"entergrade:

";

while(cin>>grade)

{if(grade>=85)cout<

"<

if(grade<60)cout<

"<

cout<<"entergrade:

";

}

cout<<"Theend."<

}

entergrade:

67

entergrade:

89

89GOOD!

entergrade:

56

56fail!

entergrade:

100

100GOOD!

entergrade:

w

Theend.

13.3.2用于字符输入的流成员函数

1.用get函数读入一个字符

(1)不带参数的get函数

cin.get();

用来从指定的输入流中提取一个字符(包括空白字符),函数返回值就是读入的字符。

若遇到文件结束符CTRL+Z,

则函数返回文件结束标志EOF(EndOfFile),一般以-1代表EOF。

例13.6用get函数读入字符。

#include

usingnamespacestd;

voidmain()

{charc;

cout<<"enterasentence:

"<

while((c=cin.get())!

=EOF)

cout.put(c);

}

enterasentence:

IstudyC++veryhard.

IstudyC++veryhard.

(2)有一个参数的get函数

cin.get(ch);

其作用是从输入流中读取一个字符,赋给字符变量ch。

读取成功返回真,失败(遇到文件结束符等)返回假。

#include

usingnamespacestd;

voidmain()

{charc;

cout<<"enterasentence:

"<

while(cin.get(c))

{cout.put(c);}

cout<<"end"<

}

(3)有三个参数的get函数

cin.get(字符指针,字符个数n,终止字符)

其作用是从输入流中读取n-1个字符,赋值个指定的字符指针指向的地方。

如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。

如果读取成功则函数返回非0(真),如失败(遇到文件结束符)返回0(假)。

#include

usingnamespacestd;

voidmain()

{charch[20];

cout<<"enterasentence:

"<

cin.get(ch,10,'\n');

cout<

}

enterasentence:

IstudyC++veryhard.

IstudyC

get函数的第三个参数可以省略,此时默认为’\n’。

2.用成员函数getline函数读入一行字符

getline成员函数的作用是从输入流中读取一行字符,其用法与带三个参数的get函数类似。

例13.7用getline函数读入一行字符。

#include

usingnamespacestd;

voidmain()

{charch[20];

cout<<"enterasentence:

"<

cin>>ch;

cout<<"Thestringreadwithcinis:

"<

cin.getline(ch,20,'/');

cout<<"Thesecondpartis:

"<

cin.getline(ch,20);

cout<<"Thethirdpartis:

"<

}

enterasentence:

IlikeC++./IstudyC++./Iamhappy.

Thestringreadwithcinis:

I

Thesecondpartis:

likeC++.

Thethirdpartis:

IstudyC++./Iamh

下一个getline函数将从该终止标志的下一个字符开始读入。

13.3.3istream类的其他成员函数

1.eof函数

从输入流中读取数据,如果到达文件末尾,eof函数值为真,否则为假。

例13.8逐个读入一行字符,将其中的非空格字符输出。

#include

usingnamespacestd;

voidmain()

{charc;

while(!

cin.eof())

if((c=cin.get())!

='')

cout.put(c);

}

C++isveryinteresting.

C++isveryinteresting.

2.peek函数

c=cin.peek();

函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。

3.putback函数

cin.putback(ch);

其作用是将前面用get或getline函数从输入流中读取的字符返回到输入流,插到当前指针位置,以供后面读取。

例13.9peek函数和putback函数的用法。

#include

usingnamespacestd;

voidmain()

{charc[20];

intch;

cout<<"pleaseenterasentence."<

cin.getline(c,15,'/');

cout<<"Thefirstpartis:

"<

ch=cin.peek();

cout<<"Thenextcharacter(ASCIIcode)is:

"<

cin.putback(c[0]);

cin.getline(c,15,'/');

cout<<"Thesecondpartis:

"<

}

pleaseenterasentence.

Iamaboy./amastudent./

Thefirstpartis:

Iamaboy.

Thenextcharacter(ASCIIcode)is:

32

Thesecondpartis:

Iamastudent

图13.4

4.ignore函数

cin.ignore(n,终止字符)

函数的作用是跳过输入流中的n个字符,或遇到指定的终止字符时提前结束。

ignore(5,’A’);

//跳过输入流中的5个字符,遇到‘A’后提前结束。

ignore();相当于ignore(1,EOF);

例13.10用ignore函数跳过输入流中的字符。

不用ignore函数的情况。

#include

usingnamespacestd;

voidmain()

{charch[20];

cin.get(ch,20,'/');

cout<<"Thefirstpartis:

"<

cin.get(ch,20,'/');

cout<<"Thesecondpartis:

"<

}

IlikeC++./IstudyC++./Iamhappy.

Thefirstpartis:

IlikeC++.

Thesecondpartis:

#include

usingnamespacestd;

voidmain()

{charch[20];

cin.get(ch,20,'/');

cout<<"Thefirstpartis:

"<

cin.ignore();

cin.get(ch,20,'/');

cout<<"Thesecondpartis:

"<

}

IlikeC++./IstudyC++./Iamhappy.

Thefirstpartis:

IlikeC++.

Thesecondpartis:

IstudyC++.

13.4文件操作与文件流

13.4.1文件的概念

文件:

一般是存储在外部介质(硬盘,光盘,U盘)上的数据的集合。

ASCII文件:

它的每一个字节放一个ASCII代码,代表一个字符,也称文本文件。

用于存储字符信息。

二进制文件:

是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

例如整数100000

图13.5

13.4.2文件流类与文件流对象

文件流是以外存文件为输入输出对象的数据流。

输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。

每一个文件流都有一个内存缓冲区与之对应。

用于文件操作的文件流类:

ifstream类,是从istream类派生的。

用来读磁盘文件。

ofstream类,是从ostream类派生的。

用来写磁盘文件。

fstream类,是从iostream类派生的。

用来读、写磁盘文件。

ofstreamoutfile;//建立一个输出文件流对象。

13.4.3文件的打开与关闭

1.打开磁盘文件

(1)调用文件流成员函数open。

ofstreamoutfile;//建立一个输出文件流对象。

outfile.open("f1.dat",ios:

:

out);

使输出文件流outfile与f1.dat文件建立关联,此时f1.dat是一个输出文件,用于接收从内存输出的数据。

调用成员函数open的一般格式为:

文件流对象.open(磁盘文件名,输入输出方式);

(2)在定义文件流时指定参数

ofstreamoutfile("f1.dat",ios:

:

out);

作用与open函数相同。

说明:

(1)新版本I/O类库中不提供ios:

:

nocreate和ios:

:

noreplace。

(2)每一个打开的文件都有一个文件指针,该指针的初始位置由I/O方式决定,每次读写都从文件指针的当前位置开始。

每读入一个字节,指针就后移一个字节。

当文件指针移到最后,就会遇到文件结束符CTRL+Z,此时一般返回EOF(值为-1)。

此时流对象的成员函数eof的值为真,表示文件结束了。

(3)可以用“位或”运算符“|”对输出方式进行组合。

ios:

:

in|ios:

:

nocreate

(4)如果打开操作失败,open函数的返回值为0(假),如果是调用构造函数的方式打开文件的,则流对象的值为0。

可以据此判断打开是否成功。

if(outfile.open("f1.dat",ios:

:

app)==0)

cout<<"openerror";

if(!

outfile.open("f1.dat",ios:

:

app))

cout<<"openerror";

2.关闭磁盘文件

关闭文件的成员函数close。

outfile.close();

所谓的关闭,就是解除该磁盘文件与文件流对象的关联。

此时,该文件流对象就可以和其它磁盘文件关联。

13.4.4对ASCII文件的操作

对ASCII文件的读写操作可以用以下两种方法:

(1)用流插入运算符“<<”和流提取运算符“>>”输入输出标准类型的数据。

(2)用流的成员函数put,get,getline等进行输入和输出。

例13.11有一个整型数组,含10个元素,从键盘输入10个整数给数组,将此数组送到磁盘文件中存放。

#include

#include

usingnamespacestd;

voidmain()

{inta[10];

ofstreamoutfile("f1.dat");

//ofstreamoutfile("f1.dat",ios:

:

out);

if(!

outfile)

{cerr<<"openerror!

"<

exit

(1);

}

cout<<"enter10integernumbers:

"<

for(inti=0;i<10;i++)

{cin>>a[i];outfile<

outfile.close();

}

enter10integernumbers:

13524610879

例13.12从例13.11建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。

#include

#include

usingnamespacestd;

voidmain()

{inta[10],max,i,order;

ifstreaminfile("f1.dat",ios:

:

in);

if(!

infile)

{cerr<<"openerror!

"<

(1);}

for(i=0;i<10;i++)

{infile>>a[i];cout<

cout<

max=a[0];

order=0;

for(i=1;i<10;i++)

if(a[i]>max)

{max=a[i];order=i;}

cout<<"max="<

infile.close();

}

13524610879

max=10

order=6

例13.13从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat中。

再把它从磁盘文件读入程序,将其中的小写字母改写为大写字母,再存入磁盘文件f3.dat。

#include

#include

usingnamespacestd;

voidsave_to_file()

{ofstreamoutfile("f2.dat");

if(!

outfile)

{cerr<<"openf2.daterror!

"<

(1);}

charc[80];

cin.getline(c,80);

for(inti=0;c[i];i++)

if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)

{outfile.put(c[i]);cout<

cout<

outfile.close();

}

voidget_from_file()

{charch;

ifstreaminfile("f2.dat",ios:

:

in);

if(!

infi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1