大学CC++程序设计案例教程(张殿龙) c_cpp12

上传人:E**** 文档编号:89465691 上传时间:2019-05-25 格式:PPT 页数:35 大小:2.08MB
返回 下载 相关 举报
大学CC++程序设计案例教程(张殿龙) c_cpp12_第1页
第1页 / 共35页
大学CC++程序设计案例教程(张殿龙) c_cpp12_第2页
第2页 / 共35页
大学CC++程序设计案例教程(张殿龙) c_cpp12_第3页
第3页 / 共35页
大学CC++程序设计案例教程(张殿龙) c_cpp12_第4页
第4页 / 共35页
大学CC++程序设计案例教程(张殿龙) c_cpp12_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《大学CC++程序设计案例教程(张殿龙) c_cpp12》由会员分享,可在线阅读,更多相关《大学CC++程序设计案例教程(张殿龙) c_cpp12(35页珍藏版)》请在金锄头文库上搜索。

1、,第12章 C+流,C+ 流,一、流的概念 二、I/O格式的控制 三、文件流 四、字符串流,C+输入输出流类库,C+I/O流,ios类中的格式化常量,ios类中的成员函数,long flags( long newflag); 设置格式标志为newflag,返回旧的格式标志。 long flags() const; 返回当前的格式标志。 long setf( long lFlags ); 设置指定的格式标志位,返回旧的格式标志。 long setf( long bits, long field); 将field指定的格式标志位置为bits,返回旧的格式标志。 long unsetf(long b

2、its); 清除bits指定的格式标志位,返回旧的格式标志。 char fill( char c); 设置填充字符,缺省条件下是空格。,ios类中的成员函数,char fill() const; 返回当前填充字符。 int precision(int val); 设置精确度为val,控制输出浮点数的有效位,返回旧值。 int precision() const; 返回旧的精确度值。 int width(int val); 设置显示数据的宽度(域宽),返回旧的域宽。 int width() const; 只返回当前域宽,缺省宽度为0。这时插入操作能按表示数 据的最小宽度显示数据。,ios类中的成

3、员函数的格式和功能,int good() const; 操作正常时返回返回非0值,当操作出错、失败和读到文件结束符时均为不正常,返回0值。 int bad() const; 操作出错时返回非0值。 int eof() const; 读取到流中最后的文件结束符时返回0值。 int fail() const; 操作失败时返回非0值。 int rdstate() const; 操作正常时返回0值,否则返回非0值,它与good()的返回值正好相反。 void clear( int nState = 0 ); 清除bad、eof和fail所对应的标志状态,使之恢复为正常状态值0,使good标志状态恢复为

4、1。,调用成员函数应用程序举例,【例12.1】使用width函数控制输出宽度。 /12-1.cpp #include using namespace std; int main() double values=1.23,35.36,653.7,4358.24; for (int i=0; i4; i+) cout.width(10); cout valuesi endl; return 0; ,1.23 35.36 653.7 4358.24,调用成员函数应用程序举例,【例12.2】使用fill函数设置填充字符。 /12-2.cpp #include using namespace std;

5、int main() double values=1.23,35.36,653.7,4358.24; for (int i=0; i4; i+) cout.width(10); cout.fill(*); cout valuesi endl; return 0; ,*1.23 *35.36 *653.7 *4358.24,预定义操纵算子的表示和含义,dec 十进制的输入输出。 hex 十六进制的输入输出。 oct 八进制的输入输出。 ws 提取空白字符。 ends 输出一个nul字符。 endl 输出一个换行字符,同时刷新流。 flush 刷新流。 resetiosflags(long) 请除

6、特定的格式标志位。 setiosflags(long) 设置特定的格式标志位。 setfill(char) 设置填充字符。 setprecision(int) 设置输出浮点数的精确度。 setw(int) 设置域宽格式变量,预定义操纵算子应用程序举例,【例12.3】使用setw操纵算子指定宽度。 #include #include using namespace std; int main() char *names=“Zoot“,“Jimmy“,“Al“,“Stan“; double values=1.23,35.36,653.7,4358.24; for (int i=0; i4; i+)

7、 cout setw(6) namesi setw(10) valuesi endl; return 0; ,预定义操纵算子应用程序举例,【例12.4】使之对齐方式。 /12-4.cpp #include #include using namespace std; int main() char *names=“Zoot“,“Jimmy“,“Al“,“Stan“; double values=1.23,35.36,653.7,4358.24; for (int i=0; i4; i+) cout setiosflags(ios:left) setw(6) namesi resetiosflag

8、s(ios:left) setw(10) valuesi endl; return 0; ,Zoot 1.23 Jimmy 35.36 Al 653.7 Stan 4358.24,文件的概念,在外存上保存的信息以文件形式存放, 每个文件有一个文件名,并存放在某盘的一个确定的目录下。 如: D:duabc.dat 是一个文件名的全称。 在C+中文件按存储格式分为两类: (1)文本文件(ASCII文件) (2)二进制文件 对于字符的输入和输出,文本文件与二进制文件没有区别,但对于数值型的数据,在对文本文件进行I/O 时,要进行格式转换,而二进制文件不需要。 如:向文本文件输出 12345 时,由于

9、 12345 是一个整数,在内存中以4个字节的二进制补码格式存放,输出到文本文件时要将每一位数字转换成ASCII码,即 31 32 33 34 35。,文件的概念,在对文件进行I/O时,必须定义一个文件流类的对象,并用该对象打开文件。对于每一个对开的文件,都有一个指向文件中当前位置的指针,打开文件时该指针的开始位置由打开方式决定(默认为0,即起始字节)。在向文件读出或写入信息时,文件指针自动向后移动相应的字节(对于文本文件移动一个字节,对二进制文件由数据类型决定)。当文件指针移到最后,读出的是文件结束符时,文件流对象调用成员函数eof()返回true。 在程序中使用文件,必须使用包含文件命令:

10、 #include ,打开文件,(1)调用文件流的成员函数open 在打开文件前先建立文件流对象,可以建立ifstream,ofstream 和 fstream类的对象。如: ifstream fin; /建立输入文件流对象 ofstream fout; /建立输出文件流对象 fstream fio; /建立输入输出文件流对象 打开文件可使用open成员函数,每一个文件件流类都有一个 open 成员函数,其原型为: void open(const char * fname,int mode); 其中第一个参数 fname 是代表文件件名的字符串,第二个参数 mode 是文件的打开方式,打开文件

11、,(2)在定义文件流对象时指定参数 在声明文件流类时定义了带参数的构造函数,其中包含了打开文件的功能。例如: ifstream( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot ); ofstream( const char* szName, int nMode = ios:out, int nProt = filebuf:openprot ); fstream( const char* szName, int nMode, int nProt = filebuf:openprot ); 因此,可以在定义

12、文件流对象时指定参数,调用文件流类的构造函数来实现打开文件的功能。,打开数据文件举例,(1)先定义一个输出文件流对象fout,然后调用open成员函数打开D盘DU目录下的ABC.DAT文件。 ofstream fout; fout.open(“D:DUABC.DAT“); (2)先定义一个输入流文件对象fin,然后调用open成员函数打开d盘根目录下的tz.txt文件。 ifstream fin; fin.open(“d:tz.txt“,ios:in|ios:nocreate); (3)定义输出文件流对象fo,同时以追加方式打开c盘根目录下的mxz.dat文件。 ofstream fo(“c:

13、mxz.dat“,ios:app);,关闭文件,在对已打开的文件的读写操作完成后,应当关闭文件。关闭文件用成员函数close。例如: fin.close(); fout.close(); fio.close();,向文本文件输出数据,向文本文件输出数据有两种方法: (1)调用从 ostream 流类继承来的插入操作符重载函数,函数原型为: ostream ,向文本文件输出数据,【例12.5】向d:abc.txt 文件输出 0 - 10 之间的整数。 /12-5.cpp #include #include using namespace std; int main() ofstream fout

14、(“d:abc.txt“); if (fout.fail() /若打开文件失败 cerr“d:abc.txt file not opened !“endl; return 1; for (int i=0;i=10;i+) fout i“ “; fout.close(); /关闭 fout 对应的文件 return 0; ,向文本文件输出数据,【例12.6】把从键盘上输的若干行文字存入d:tz.txt,键盘输入以 ctrl+Z 结束。 #include #include using namespace std; int main() ofstream fout(“d:tz.txt“); if (

15、!fout) / 若打开文件失败 cerr“File d:tz.txt not open“endl; return 1; char ch; while(ch=cin.get()!=EOF) fout.put(ch); fout.close(); return 0; ,从文本文件输入数据,从文本文件输入数据到内存有三种方法: (1)调用从 istream 流类继承来的提取操作符重载函数,函数原型为: istream ,从文本文件输入数据,【例12.7】将例子1中建立的d:abc.txt 中的内容显示出来。 #include #include using namespace std; int ma

16、in() ifstream fin(“d:abc.dat“); if (fin.fail() / 若打开文件失败 cerrx) cout x “ “; cout endl; fin.close(); / 关闭 fin 对应的文件 return 0; ,0 1 2 3 4 5 6 7 8 9 10,从文本文件输入数据,【例12.8】复制文本文件。 #include #include using namespace std; int main() char fname64; cout fname; ifstream infile(fname); if (infile.fail() cout“源文件“fname“打开失败

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号