版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计实习概要剖析输入输出流输入输出流l流的概念模型lC+中与流操作相关的类及其继承关系l输入输出流对象: cin, cout, cerr, clogl输出流l输入流l无格式输入输出l流操纵算子l流格式状态流的概念模型流的概念模型l流 - 可以看作一个无限长的二进制数字序列l通过读写指针进行流的读和写(以字节为单位) 1010111010101110将流上的数据读进变量x1 0 1 0 1 1 1 011100010将y的值写入流yx流的概念模型流的概念模型l输出流 可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,1 1 00011010写指针流的概念模型流的概念模型l输入流
2、 可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。1 1 00011010读指针有格式读写和无格式读写有格式读写和无格式读写字符方式字符方式/二进制方式读写二进制方式读写l有格式读写,以某种数据类型为单位读写l例如:读一个整数,写一个浮点数等;l无格式读写,以字节为单位读写,不区分其中的内容l例如:读20个字节,写50个字节等;缓冲区刷新缓冲区刷新l向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写;也可以通过函数在程序中主动将缓冲区内容写入输出流。C+C+中与流操作相关的类中与流操作相关的类及其继承关系及其继承关系iosistr
3、eamostreamifstreamiostreamofstreamfstream标准流对象标准流对象l输入流对象: cin 与标准输入设备相连l输出流对象:cout 与标准输出设备相连 cerr 与标准错误输出设备相连 非缓冲输出 clog 与标准错误输出设备相连 缓冲输出 输出流输出流l流插入运算符 cout “Good morning!n”; 不刷新缓冲区 cout “Good”; 不刷新缓冲区 cout “morning!”; 不刷新缓冲区 cout endl; 刷新缓冲区 cout 运算符的定义: istream &operator (istream &input, A & a) .
4、 return input; 返回的是输入流的引用(引用本身是地址),在读取不成功时, 该地址被置成 0. 所以可以用如下方法判输入结束: int x; while(cinx) 输入流输入流l成员函数 l三 读入一个字符(包括空白字符), 返回该字符;lcin.get(char *buffer, int size,char delim=n )l 或者读size 1 个字符入buffer,或者遇到n;l 在buffer最后加0,分隔符留在输入流.lcin.getline(char *buffer, int size,char delim=n)l 或者读size 1 个字符入buffer,或者遇到
5、n;l 在buffer最后加0, 分隔符从流去掉.l三 返回输入是否结束标志.输入流输入流l其它函数l三; 返回下一个字符,但不从流中去掉.lputback(char ch); 将字符ch放回输入流lignore( int nCount = 1, int delim = EOF );l 从流中删掉最多nCount个字符,遇到EOF时结束。无格式输入输出无格式输入输出l用read, write 进行指定字节数的输入输出lconst int SIZE = 80;lchar bufferSIZE;lcin.read(buffer, 20);lcout.write(buffer, 三);l /gcou
6、nt返回上次读入的字节数lcout endl;l输入:Using the read,write and gcount member functions l输出:Using the read,write流操纵算子流操纵算子l整数流的基数:流操纵算子dec,oct,hex,setbasedec,oct,hex,setbasel浮点数的精度(precision,setprecision)l设置域宽(setw,width)l用户自定义的流操纵算子使用流操纵算子需要 #include 流操纵算子流操纵算子l整数流的基数:流操纵算子dec,oct,hexdec,oct,hex int n = 10; co
7、ut n endl; cout hex n “n” dec n “n” oct n setprecision(5); / 可以连续输出它们的功能相同。指定输出浮点数的有效位数 浮点数输出最多6位有效数字#include #include using namespace std;int main三double x = 1234567.89,y = 12.34567;int n = 1234567;int m = 12;cout setprecision(6) x endl y endl n endl m; 控制浮点数精度的流操纵算子输出:1.23457e+006123456712 以小数点位置固
8、定的方式输出#include #include using namespace std;int main三double x = 1234567.89,y = 12.34567;int n = 1234567;int m = 12;cout setiosflags(ios:fixed) setprecision(6) x endl y endl n endl m;控制浮点数精度的流操纵算子输出:123456712 取消以小数点位置固定的方式输出#include #include using namespace std;int main三double x = 1234567.89;cout set
9、iosflags(ios:fixed) setprecision(6) x endl resetiosflags(ios:fixed) setw(5); 或者 cin.width(5);cout string) 90 while(cin string) 90 cout.width(w+); cout.width(w+); cout string endl; cout string string; 567890 cout string string; cout string string; 5678 cout string string; cout string endl; 用户自定义流操纵算子
10、用户自定义流操纵算子ostream &tab(ostream &output) return output t;cout “aa” tab “bb” endl;输出:aa bb为什么可以?用户自定义流操纵算子用户自定义流操纵算子因为 iostream 里对 进行了重载(成员函数)ostream & operator ( ostream & ( * p ) ( ostream & ) ) ;文件操作文件操作l数据的层次l文件和流l建立顺序文件l文件的读写指针l有格式读写l无格式读写数据的层次数据的层次l位 bitl字节 bytel域/记录例如:学生记录 int ID; char name10;
11、int age; int rank10;l我们将所有记录顺序地写入一个文件,称为顺序文件。 文件和流文件和流l可以将顺序文件看作一个有限字符构成的顺序字符流,然后象对cin, cout 一样的读写。回顾一下输入输出流类的结构层次:iosistreamostreamifstreamiostreamofstreamfstream建立顺序文件建立顺序文件l#include / 包含头文件lofstream ”, ios:out|ios:binary); /打开文件lofstream 是是 fstream中定义的类中定义的类loutFile 是我们定义的是我们定义的ofstream类的对象类的对象l“
12、”是将要建立的文件的文件名是将要建立的文件的文件名lios:out 是打开并建立文件的选项是打开并建立文件的选项lios:out 输出到文件输出到文件, 删除原有内容删除原有内容lios:app 输出到文件输出到文件, 保留原有内容,总是在尾部添加保留原有内容,总是在尾部添加lios:ate 输出到文件输出到文件, 保留原有内容,可以在文件任意位置添加保留原有内容,可以在文件任意位置添加 lios:binary 以二进制文件格式打开文件建立顺序文件建立顺序文件l也可以先创建ofstream对象,再用 open函数打开 ofstream fout; fout.open(test.out,ios:
13、out|ios:binary);l判断打开是否成功: if(!fout)cerr “File open error!”endl;文件的读写指针文件的读写指针l对于输入文件,有一个读指针;l对于输出文件,有一个写指针;l对于输入输出文件,有一个读写指针;l标识文件操作的当前位置, 该指针在哪里,读写操作就在哪里进行。文件的读写指针文件的读写指针lofstream fout(“a1.out”,ios:ate);llong location = fout.tellp三; l /取得写指针的位置llocation = 10L;lfout.seekp(location); l / 将写指针移动到第10个
14、字节处lfout.seekp(location,ios:beg); /从头数locationlfout.seekp(location,ios:cur); /从当前位置数locationlfout.seekp(location,ios:end); /从尾部数locationllocation 可以为负值文件的读写指针文件的读写指针lifstream fin(“a1.in”,ios:ate);llong location = fin.tellg三; l /取得读指针的位置llocation = 10L;lfin.seekg(location); l / 将读指针移动到第10个字节处lfin.see
15、kg(location,ios:beg); /从头数locationlfin.seekg(location,ios:cur); /从当前位置数locationlfin.seekg(location,ios:end); /从尾部数locationllocation 可以为负值字符文件读写字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流操作算子也同样适用于文件流。写一个程序,将文件 里面的整数排序后,输出到例如,若 的内容为:1 234 9 45 6 879则执行本程序后,生成的的内容为:1 6 9 45 234 879#include #include #include using
16、namespace std;int cmp(const void * x1, const void *x2) return *(int *)x1) - *(int *)x2); int main三 int v100, int i = 0 , x;ifstream srcFile(in.txt,ios:in);ofstream destFile(out.txt,ios:out);while( srcFile x ) vi = x; i+; qsort(v,i, sizeof(int), cmp);for( int j = 0; j i; j + )destFile vj ;三;三;参考程序二进制
17、文件读写二进制文件读写lint x=10;lfout.seekp(20, ios:beg);lfout.write(const char *)(&x),sizeof(int);lfin.seekg(0, ios:beg);lfin.read(char *)(&x),sizeof(int);l二进制文件读写,直接写二进制数据,记事本看未必正确。二进制文件读写,直接写二进制数据,记事本看未必正确。二进制文件读写二进制文件读写/下面的程序从键盘输入几个学生的姓名的成绩,并以二进制/文件形式存起来#include #include using namespace std;class CStudent
18、public:char szName20;int nScore;int main三CStudent s;ofstream OutFile( ,ios:out|ios:binary);while( cin ) if( stricmp(s.szName,“exit”) = 0) /名字为exit则结束break;OutFile.write(char * ) & s, sizeof( s);三;return 0;输入: Tom 60Jack 80Jane 40exit 0则形成的 为 72字节,用 记事本打开,呈现:Tom 烫烫烫烫烫烫烫烫 Jack 烫烫烫烫烫烫烫蘌 Jane 烫烫烫烫烫烫烫?二进
19、制文件读写二进制文件读写/下面的程序将 文件的内容读出并显示#include #include using namespace std;class CStudent public:char szName20;int nScore;int main三CStudent s;ifstream InFile(“c:tmpstudents.dat”,ios:in | ios:binary);if(!InFile) cout error endl;return 0;while( ( (char* ) & s, sizeof(s) ) int nReadedBytes = 三; /看刚才读了多少字节cout
20、 endl;三;return 0; 输出:Tom 60Jack 80Jane 40二进制文件读写二进制文件读写/下面的程序将 文件的Jane的名字改成Mike#include #include using namespace std;class CStudent public:char szName20;int nScore;输出:Tom 60Jack 80Mike 40int main三CStudent s;fstream iofile( c:tmpstudents.dat,ios:in|ios:out | ios:binary);if( !iofile) cout error ;return 0;( 2 * sizeof(s),ios:beg);/定位写指针到第三个记录iofile.write(Mike,strlen(Mike);iofile.seekp(0,ios:beg); /定位读指针到开头while( ( (char* ) & s, sizeof(s) ) cout settings-debug -program argumen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年红外遮蔽诱饵及伪装陶瓷粉料项目融资计划书
- 兽医寄生虫病学试题库(含参考答案)
- 养老院老人心理辅导支持制度
- 养老院老人紧急救援人员行为规范制度
- 《肠内营养护理》课件
- 房屋架木安全协议书范文(2篇)
- 2025年南宁货运从业资格证的考题
- 2025年杭州货运从业资格证考试题库答案大全
- 2024年物联网智能家居系统研发与销售合同
- 2025年哈密货运从业资格证考题
- 浅谈PROFIBUS-DP现场总线在桥式起重机地应用
- 建筑工地农民工业余学校教学台帐
- 2023年应急管理部宣传教育中心招聘笔试备考试题及答案解析
- 单位实习生意外应急预案
- 道口社区旧楼改造楼梯间涂料、油漆施工方案设计
- 保险营销促销老客户服务攻略
- STK基础教程学习版
- 小学校医聘任协议书
- 全过程工程咨询管理服务方案
- 国开毕业2023(必备15篇)
- 材料的性能与规划教学设计
评论
0/150
提交评论