《流类库与输入输出.ppt》由会员分享,可在线阅读,更多相关《流类库与输入输出.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、流类库与输入输出操作流类库与输入输出操作一、流的概念及流类库结构一、流的概念及流类库结构东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计 流:是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动一、流的概念及流类库结构一、流的概念及流类库结构东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计cincin、cerr、clogstr东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计二、标准输入输出流二、标准输入输出流标准输入输出流cin:标准输入 istream类的对象用来处理标准输入,即键盘输入。cout:标准输出 ostream
2、类的对象,用来处理标准输出,即屏幕输出。cerr:标准输出 ostream类的对象,用来处理标准出错信息,不带缓冲区,发给它内容立即输出clog:标准输出 ostream类的对象,用来处理标出错信息,带缓区,缓冲区满时被输出二、标准输入输出流二、标准输入输出流东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计 有一元二次方程ax2+bx+c=0,其一般解为x1,2=(-bb2-4ac)/2a,但若a=0,或b2-4ac0时,用此公式出错。#include#include using namespace std;int main()float a,b,c,disc;coutabc;
3、if(a=0)cerra is equal to zero,error!endl;else if(disc=b*b-4*a*c)0)cerrdisc=b*b-4*a*c0endl;else coutx1=(-b+sqrt(disc)/(2*a)endl;coutx2=(-b-sqrt(disc)/(2*a)endl;return 0;东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计二、标准输入输出二、标准输入输出(格式控制格式控制)1.使用控制符控制格式控制符控制符作用作用dec以十进制输出hex以十六进制输出oct以八进制输出setbase(n)以n进制形式输出(n的取值,8
4、,10,16)setfill(c)设置填充符c,c可以是常量或变量setw(n)设置字段宽度为n位setiosflags(ios:left)输出数据左对齐setiosflags(ios:fixed)设置浮点以固定的小数位数显示setiosflags(ios:showpos)输出时正数给出”+”注意:这些控制符号都在iomanip头文件中,使用时应在程序中包含相关头文件#include#include/不要忘记包含此头文件using namespace std;int main()int a;couta;coutdec:decaendl;/以十进制形式输出整数 couthex:hexaendl;
5、/以十六进制形式输出整数a coutoct:setbase(8)aendl;/以八进制形式输出整数a char*pt=China;/pt指向字符串China coutsetw(10)ptendl;/指定域宽为10,输出字符串 coutsetfill(*)setw(10)ptendl;/指定域宽10,输出字符 double pi=22.0/7.0;/计算pi值 coutsetiosflags(ios:scientific)setprecision(8);/按指数形式输出,coutpi=piendl;/输出pi值 coutpi=setprecision(4)piendl;/改为4位小数 coutp
6、i=setiosflags(ios:fixed)piendl;/改为小数形式输出 return 0;东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计二、标准输入输出二、标准输入输出(格式控制格式控制)3.使用流对象的成员函数控制格式输出 除了可以用控制符来控制输出格式外,还可以通过调用流对象cout中用于控制输出格式的成员函数来控制输出格式。流成员函数流成员函数作用相同的控制符作用相同的控制符作用作用precision(n)setprecision(n)设置实数的精度为n位width(n)setw(n)设置字段宽度fill(c)setfill(c)设置填充字符csetf()se
7、tiosflags()设置输出格式状态unsetf()resetioflags()终止已设置的格式状态#include using namespace std;int main()int a=21 cout.setf(ios:showbase);/显示基数符号(0 x或0)coutdec:aendl;/默认以十进制形式输出a cout.unsetf(ios:dec);/终止十进制的格式设置 cout.setf(ios:hex);/设置以十六进制输出的状态 couthex:aendl;/以十六进制形式输出acout.unsetf(ios:hex);/终止十六进制的格式设置 cout.setf(i
8、os:oct);/设置以八进制输出的状态 coutoct:aendl;/以八进制形式输出acout.unseft(ios:oct);char*pt=China;/pt指向字符串China cout.width(10);/指定域宽为10 coutptendl;/输出字符串 cout.width(10);/指定域宽为10return 0;三、文件输入输出三、文件输入输出ASCII文件与二进制文件 ASCII文件提供了高级的输入输出功能,把若干个字节转换为一个有意义的单位,然后以ASCII字符形式输入输出 二进制文件提供低级的输入输出功能,这种输入输出不经过转化,因此效率较高,传输速度快,效率高三、
9、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计文件流与文件流类文件流类ifstream;由istream派生而来,用于支持磁盘文件的输入ofstream;由oftream派生而来,用于支持面向文件的输出fstream;由iostream派生而来,用于支持面向文件的输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计1.打开磁盘文件方式一ofstream outfile;outfile.open(f1.dat,ios:out);方式二ofstream outfile(“f.dat”,”ios:out
10、”);方式方式作用作用ios:out以输出方式打开文件ios:in以输入方式打开文件ios:app以输出方式打开文件,写的数据添加到末尾ios:ate打开一个已有文件,直接定位到末尾ios:trunc打开一个文件,如果已经存在删除数据ios:binary已二进制形式打开一个文件ios:nocreate打开一个文件,如果不存在打开失败ios:in|ios:binary以二进制输入方式打开二进制文件ios:in|ios:out以输入输出方式打开一个文件三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计2.文件有效性检查及关闭a.有效性检查:if(!in
11、file)cerr“error:unable to open input file”;exit(1)b.关闭文件:infile.close();c.将文件流与新文件重新关联:ifstream infile(“in”);infile.close();infile.open(“next”);三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计#include using namespace std;int main()int a10;ofstream outfile(f1.dat,ios:out);if(!outfile)cerropen error!e
12、ndl;exit(1);coutenter 10 integer numbers:endl;for(int i=0;iai;outfileai;outfile.close();return 0;#include int main()int a10;ifstream infile(f1.dat,ios:in|ios:nocreate);if(!infile)cerropen error!endl;exit(1);for(i=0;iai coutai“;infile.close();return 0;1.对ASCII文件的操作三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏
13、州)C+程序设计程序设计2.对二进制文件进行读写2.1 利用成员函数read和write读写二进制文件istream.read(char*buf,int len)ostream.write(char*buf,int len)2.2 与文件指针有关的流成员函数成员函数成员函数作用作用gcount()返回最后一个输入所读入的字节数tellg()返回输入文件指针当前的位置seekg(文件中位置)将文件指针移到指定的位置tellp()返回输出文件指针当前的位置seekp(文件中的位置)将输出文件指针移动到指定的位置三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计
14、程序设计 现有一批学生数据存储于(stuInfo.txt),数据成员包括(学号、姓名性别),要求输入一条学生信息,写入文件后,显示其他所有学生的信息流类库与输入输出操作流类库与输入输出操作东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计四、字符串流四、字符串流东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计字符串流类istrstream;由istream派生而来,从内存空间读取数据ostrstream;由oftream派生而来,将数据流向内存空间strstream;由oftream派生而来,向内存空间读写数据1.建立输出字符串流对象ostream:ostream
15、(char*buf,int n,int mode=ios:out)2.建立输入字符串对象istream:istream(char*buf,int n)istream:istream(char*buf)四、字符串流四、字符串流东南大学软件学院东南大学软件学院(苏州苏州)C+程序设计程序设计using namespace std;struct studentint num;char name20;float score;int main()student stud3=1001,Li,78,1002,Wang,89.5,1004,Fun,90;char c50;/用户定义的字符数组 ostrstre
16、am strout(c,50);/建立输出字符串流,与数组c建立关联,缓冲区长30 for(int i=0;i3;i+)/向字符数组c写3个学生的数据 strout studi.num studi.name studi.score;stroutends;/ends是C+的I/O操作符,插入一个0 coutarray c:cendl;/显示字符数组c中的字符将一组数据保存在字符数组中 编写一个简单的通讯录程序,在文件myNote.txt中记录朋友的姓名、年龄和电话号码,允许用户向其中添加信息、根据姓名查询或显示所有的信息。要求:向控制台输入1时,向电话薄中添加用户信息 向控制台输入2时,可以查询用户信息 向控制台输入3时,显示所有用户信息