C++语言程序设计 输入输出流_第1页
C++语言程序设计 输入输出流_第2页
C++语言程序设计 输入输出流_第3页
C++语言程序设计 输入输出流_第4页
C++语言程序设计 输入输出流_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++语言程序设计输入输出流2I/O流的概念当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。3C++的流C++的流——

表示一种数据传递操作。它是与某一I/O设备相联系的(例如键盘、显示器、磁盘等);通过使用流类中定义的方法,就可以实现利用这些设备完成输入输出操作.与输入设备(如键盘)相联系的流称为输入流,例如标准输入流cin;与输出设备(如显示器)相联系的流称为输出流,例如标准输出流cout;与输入输出设备(如磁盘)相联系的流称为输入输出流4流类地继承体系iosostreamistreamclogfstreamiostreamcerrcinofstreamifstreamcoutiostream.hfstream.h5预定义流预先定义的输出流对象:cout标准输出cerr标准错误输出,没有缓冲,发送给它的内容立即被输出。clog类似于cerr,但是有缓冲,缓冲区满时被输出。预先定义的输入流对象:cin标准输入要使用这四个对象,必须包含<iostream>文件6输入/输出成员函数intistream::get();作用:函数值返回流中一个字符的ASCII码值例:voidmain(){charch;

while(

(ch=cin.get())

!=EOF)

cout<<“ch:“<<ch<<endl;}问题:get()的返回值不是iostream对象,不能连续输入7istream&istream::get(char&c);作用:从流中提取一个字符,并存入实参变量例:voidmain(){charch1,ch2,ch3; cout<<“Inputthreeletters:”;

cin.get(ch1).get(ch2).get(ch3);}可以连续输入8istream&istream::get(char*,int,char=‘\n’);istream&istream::getline(char*,int,char=‘\n’);作用:从文本中提取指定个数的字符,并在串数组末添加一个空字符第一个参数指向接受字符数据的字符数组第二个参数指定字符数组最多可容纳的字符个数第三个参数用于指定一个终止符,默认为换行符。操作遇到终止符或提取到规定个数字符时,提取终止注意:get(...)不从流中提取终止字符,终止字符仍在输入流中

getline(...)从流中提取终止字符,但终止字符被丢弃两个提取操作成员函数都可以连续输入9例20-1比较cin和cin.get的输入#include<iostream>usingnamespacestd;intmain(){ constintSIZE=80; charch1,ch2,ch3,buffer1[SIZE],buffer2[SIZE]; cout<<"Enterasentence:\n"; cin>>buffer1; cout<<"Thestringreadwithcinis:\n"<<buffer1; ch1=cin.get(); ch2=cin.get(); cout<<"\nTheresultofcin.get()is:\n"<<ch1<<ch2; cin.get(ch3); cout<<"\nTheresultofcin.get(ch3)is:\n"<<ch3; cin.get(buffer2,SIZE); cout<<"\nThestringreadwithcin.get(buffer2,SIZE)is:\n"<<buffer2<<endl; return0;}10ostream&ostream::put(charc);

作用:输出参数c的字符例:voidmain(){

char

ch=

‘A’; cout<<ch<<endl; cout.put(ch);}输出结果:

A A例:voidmain(){

int

ch=‘A’; cout<<ch<<endl; cout.put(ch);}输出结果:

65 A11格式化输入输出C++提供了两种输入输出格式控制的方法利用ios类中有关格式控制的成员函数使用称为流操纵符的特殊函数进行格式控制12流格式状态标志C++在类ios_base中提供格式化输入输出。这些格式是对所有文本方式的输入输出流均适用。流格式状态标志定义为公有的无名的枚举类型P319表该枚举量说明中每一个枚举量实际对应两字节数据(16位)中的一个位,所以可以同时采用几个格式控制,只要把对应位置1即可,这样既方便又节约内存。取多种控制时,用或“|”运算符来合成,合成为一个长整型数13使用流对象的成员函数控制I/O格式设置标志字的成员函数longflags():返回流格式标志的当前设置;例:cout.flags(ios::scientific|ios::showpos);longsetf():设置流格式标志例:cout.setf(ios::uppercase|ios::scientific);longunsetf(long):清除流格式标志控制输出格式和成员函数设置域宽:intwidth()填充字符:intfill()设置精度:intprecision()14例20-2浮点数输出-使用流对象的成员函数#include<iostream>usingnamespacestd;intmain(){ doublefnum=31.415926535; cout<<"默认域宽为:"<<cout.width()<<"位"<<'\n'; cout<<"默认精度为:"<<cout.precision()<<"位"<<'\n'; cout<<"默认表达方式:"<<fnum<<'\n'; //按值大小,自动决定定点还是科学数方式

cout.setf(ios::scientific); cout<<"科学数表达方式:"<<fnum<<'\n'; cout.setf(ios::fixed);//设为定点,取消科学数方式

cout<<"定点表达方式:"<<fnum<<'\n'; cout.precision(9);//精度9位指小数点后9位

cout.setf(ios::scientific,ios::floatfield); cout<<"9位科学数表达方式"<<fnum<<'\n'; return0;}15使用流操纵符控制I/O格式程序中要使用C++提供的预定义流操纵符,通常都需包含进头文件iostream和iomanipP323表例20-3使用流操纵符16#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ cout<<setw(10)<<123<<567<<endl; cout<<123<<setiosflags(ios::scientific)<<setw(20)<<123.456789<<endl; cout<<resetiosflags(ios::scientific)<<setprecision(4)<<123.456789<<endl; cout<<left<<setfill('#')<<setw(8)<<123<<endl; cout<<right<<setfill('$')<<setw(8)<<456<<endl; return0;}17注意使用cout.width(n)和setw(n)设置输出宽度时,仅对其后紧接它的输出数据起作用;如果数据的长度超过指定宽度,忽略设置,按数据实际长度显示其他格式控制对其后的所有输出操作都有效使用流操纵符更加简洁18文件当打开一个文件时,该文件就和某个流关联起来了。对文件进行读写实际上受到一个文件定位指针(filepositionpointer)的控制。根据文件内容的组织形式,C++将(磁盘)文件分为文本文件和二进制文件两类:文本文件的每个字节存放的是一个ASCII码,代表一个字符二进制文件则是把内存中的数据按其原始形式(二进制代码形式)直接写到磁盘文件中存放起来C++的程序要进行文件操作必须包含头文件fstream.hC++中进行文件操作的基本步骤:①打开文件②对文件输入/输出③关闭文件。19文件的打开与关闭1、打开文件步骤:①创建流对象②使用该对象的方法open()打开指定的文件。(①②合在一起时可以省略函数名open).根据①中创建不同的文件流类的对象,打开文件的具体方法可分为两种: (1)通过创建fstream类对象打开文件形式:fstream对象名; 对象名.open(文件名字符串,访问方式);20其中,文件名字符串指打开文件的全文(若非当前目录下,还需写出路径名);访问方式见教材P328表。注意:这些访问方式也可以通过或运算符“|”

逐个连接起来共同使用.(2)通过创建ifstream类或ofstream类对象打开文件

读文件的方式:ifstream对象名; 对象名.open(文件名字符串);

写文件的方式:ofstream对象名; 对象名.open(文件名字符串);21打开文件也应该判断是否成功,若成功,文件流对象值为非零值,不成功为0(NULL),文件流对象值物理上就是指它的地址。因此打开一个文件完整的程序为:fstreamiofile(”myfile.txt”,ios::in|ios::out);if(!iofile){

cout<<”不能打开文件:”<<”myfile.txt”<<endl; return-1;}//失败退回 222、关闭文件打开的文件使用完毕后要及时关闭,这样既可以保护文件,又可以及时释放内存空间,提高程序运行效率.关闭文件要使用成员函数close(),格式:

文件流对象名

.close();其中,文件流对象名是与要关闭的文件相关联的文件流对象的名称。例:

ifstreaminfile;infile.open(“D:\\

f1.txt”);

……infile.close();23文件的输入与输出1、文本文件的输入(读)/输出(写)对已正确打开的某文本文件,可以通过对与其相关联的流类对象的如下操作进行读写使用提取、插入操作

使用成员函数get(含getline)和put

24例20-4使用输入、输出运算符读写文本文件#include<iostream>#include<fstream>usingnamespacestd;intmain(){ ofstreamoutfile; outfile.open("abc.txt");//以写的方式打开文件abc.txt if(!outfile) { cout<<"abc.txtcan'topen"<<endl; return-1;//打开失败,结束程序

}25

charch='a'; while(ch<='z') { outfile<<ch; ch++; } outfile.close(); fstreaminfile("abc.txt",ios::in);//以读的方式打开文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论