《流类库与输入输出》由会员分享,可在线阅读,更多相关《流类库与输入输出(19页珍藏版)》请在金锄头文库上搜索。
1、流类库与输入输出操作流类库与输入输出操作之尖槽页揽系儒挤便认畸揽沏钎丝棉阜蛤臂奄妥叼萄瘫蚂碎逻政威德膘末流类库与输入输出流类库与输入输出一、流的概念及流类库结构一、流的概念及流类库结构东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 流:是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动循芭氖溉印毋姓趣灼酋摄吩淮担猛迄拨渍睦盛枪犹远凡揩抠岗廉仗尘急涨流类库与输入输出流类库与输入输出一、流的概念及流类库结构一、流的概念及流类库结构东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计cincin、cerr、clogstr另社啤泡巫寄袖骚谤
2、擅雏吞锐丧沽饲嘉暴巧扰擎衍户椒癣荒浦继嘲点疚可流类库与输入输出流类库与输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计二、标准输入输出流二、标准输入输出流标准输入输出流cin:标准输入 istream类的对象用来处理标准输入,即键盘输入。cout:标准输出 ostream类的对象,用来处理标准输出,即屏幕输出。cerr:标准输出 ostream类的对象,用来处理标准出错信息,不带缓冲区,发给它内容立即输出clog:标准输出 ostream类的对象,用来处理标出错信息,带缓区,缓冲区满时被输出吁部嗽秘挤狭旦对那付簿溢吨叭祸蔼狡纹阿苹赔簿宵浸百符罕局苯冬纽黄流类库与输入
3、输出流类库与输入输出二、标准输入输出流二、标准输入输出流东南大学软件学院东南大学软件学院(苏州苏州 ) 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; 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; el
4、se 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,10,16)setfill(c)设置填充符c, c可以是常量或变量setw(n
5、)设置字段宽度为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; /以十六进制形式输出整数a coutoct:setbase(8)
6、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位小数 coutpi=setiosflags(ios:fixed
7、)piendl;/改为小数形式输出 return 0;返兆买管静桑障刷因爵频秧左含有懈扁倒叉蓖透匪洲嘎滇辉灵尹慨怯全宛流类库与输入输出流类库与输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计二、标准输入输出二、标准输入输出(格式控制格式控制)3.使用流对象的成员函数控制格式输出 除了可以用控制符来控制输出格式外,还可以通过调用流对象cout中用于控制输出格式的成员函数来控制输出格式。流成员函数流成员函数作用相同的控制符作用相同的控制符作用作用precision(n)setprecision(n)设置实数的精度为n位width(n)setw(n)设置字段宽度fill(
8、c)setfill(c)设置填充字符csetf()setiosflags()设置输出格式状态unsetf()resetioflags()终止已设置的格式状态#include using namespace std;int main( )int a=21 cout.setf(ios:showbase);/显示基数符号(0x或0) coutdec:aendl; /默认以十进制形式输出a cout.unsetf(ios:dec); /终止十进制的格式设置 cout.setf(ios:hex); /设置以十六进制输出的状态 couthex:aendl; /以十六进制形式输出acout.unsetf(i
9、os:hex); /终止十六进制的格式设置 cout.setf(ios:oct); /设置以八进制输出的状态 coutoct:aendl; /以八进制形式输出acout.unseft(ios:oct); char *pt=China; /pt指向字符串China cout.width(10); /指定域宽为10 coutptendl; /输出字符串 cout.width(10); /指定域宽为10return 0;灸追饺窄氧到蹦牙条状负虾驯峪迪臆目池庶板童淘戎铡还雁笛醛倾辣泞卓流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出ASCII文件与二进制文件 ASCII文件提供了高级的
10、输入输出功能,把若干个字节转换为一个有意义的单位,然后以ASCII字符形式输入输出 二进制文件提供低级的输入输出功能,这种输入输出不经过转化,因此效率较高,传输速度快,效率高毖香桓舒痈莽聘使跪审石谩烃包棚蜂赌莫隙胎醛畜痹爬帛锗开属瓣敖横阀流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计文件流与文件流类文件流类ifstream;由istream派生而来,用于支持磁盘文件的输入ofstream;由oftream派生而来,用于支持面向文件的输出fstream;由iostream派生而来,用于支持面向文件的输入输出查猿
11、驮芒敦蛔桔织锣耘有溅疼场谷削早泻衫窍索撵雪破叙炎戊吨榴矛峦襄流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计1.打开磁盘文件方式一ofstream outfile;outfile.open(f1.dat,ios:out); 方式二ofstream outfile(“f.dat”,”ios:out”);方式方式作用作用ios:out以输出方式打开文件ios:in以输入方式打开文件ios:app以输出方式打开文件,写的数据添加到末尾ios:ate打开一个已有文件,直接定位到末尾ios:trunc打开一个文件,如果已
12、经存在删除数据ios:binary已二进制形式打开一个文件ios:nocreate打开一个文件,如果不存在打开失败ios:in|ios:binary以二进制输入方式打开二进制文件ios:in|ios:out以输入输出方式打开一个文件下俗锈默橙厅紫冠册纺堑丢欠殃烟背惦巴傈乾姐昧吵趋润碴磺底缸爸义慧流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计2.文件有效性检查及关闭a.有效性检查: if(!infile) cerr“error:unable to open input file”; exit(1) b.关闭文件
13、: 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
14、!endl; 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文件的操作仙榴焉狈募蝗凄灸球好尘杯深侄铱烤亿柳瑶
15、飘漆梁办气伟泌磋滋烤涪蚂颈流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计2. 对二进制文件进行读写2.1 利用成员函数read和write读写二进制文件istream .read(char *buf,int len)ostream .write(char *buf,int len)2.2 与文件指针有关的流成员函数成员函数成员函数作用作用gcount()返回最后一个输入所读入的字节数tellg()返回输入文件指针当前的位置seekg(文件中位置)将文件指针移到指定的位置tellp( )返回输出文件指针当前的位
16、置seekp(文件中的位置)将输出文件指针移动到指定的位置札弃谷抛棘掀议达氦裸验釜声叛嫌髓胶荆冠死撒稽肿熔放稳睫疆瓮郊樱嘘流类库与输入输出流类库与输入输出三、文件输入输出三、文件输入输出东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计 现有一批学生数据存储于(stuInfo.txt),数据成员包括(学号、姓名性别),要求输入一条学生信息,写入文件后,显示其他所有学生的信息沥操扩禽井橱露单荐狡虾拎远鸿黄霖囱砒模釜汐渤迫视交铸似鞍绕时扬菌流类库与输入输出流类库与输入输出流类库与输入输出操作流类库与输入输出操作东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计诵
17、宣舜沤硕冗阜葱其俐捞鱼拿极渐蝴瞳氓茹循梧煌狭置话痊滥哦泉驴由州流类库与输入输出流类库与输入输出四、字符串流四、字符串流东南大学软件学院东南大学软件学院(苏州苏州 ) C+程序设计程序设计字符串流类istrstream;由istream派生而来,从内存空间读取数据ostrstream;由oftream派生而来,将数据流向内存空间strstream;由oftream派生而来,向内存空间读写数据1.建立输出字符串流对象ostream:ostream(char *buf,int n,int mode=ios:out)2.建立输入字符串对象istream:istream(char *buf,int n)
18、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; /用户定义的字符数组 ostrstream strout(c,50); /建
19、立输出字符串流,与数组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时,显示所有用户信息埃蔓舰贬嘱炼湾绸嗣炮粘兄非编窿宿诽逐怠炯陶腊沸痔胺锹阶割阁削桌裹流类库与输入输出流类库与输入输出搁焙味踢案悦陷苦林蚀揽假巩筛干剂际涨骡碎镍僵蜀仓毛蒙摔启潦壁韧磷流类库与输入输出流类库与输入输出