程序设计实习概要课件.ppt

上传人(卖家):晟晟文业 文档编号:4608076 上传时间:2022-12-24 格式:PPT 页数:51 大小:162.50KB
下载 相关 举报
程序设计实习概要课件.ppt_第1页
第1页 / 共51页
程序设计实习概要课件.ppt_第2页
第2页 / 共51页
程序设计实习概要课件.ppt_第3页
第3页 / 共51页
程序设计实习概要课件.ppt_第4页
第4页 / 共51页
程序设计实习概要课件.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、.1程序设计实习程序设计实习输入输出流和文件操作.2输入输出流输入输出流l流的概念模型lC+中与流操作相关的类及其继承关系l输入输出流对象:cin,cout,cerr,clogl输出流l输入流l无格式输入输出l流操纵算子l流格式状态.3流的概念模型流的概念模型l流 -可以看作一个无限长的二进制数字序列l通过读写指针进行流的读和写(以字节为单位)1010111010101110将流上的数据读进变量x1 0 1 0 1 1 1 011100010将y的值写入流yx.4流的概念模型流的概念模型l输出流 可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,1 1 00011010写指针.5

2、流的概念模型流的概念模型l输入流 可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。1 1 00011010读指针.6有格式读写和无格式读写有格式读写和无格式读写字符方式字符方式/二进制方式读写二进制方式读写l有格式读写,以某种数据类型为单位读写l例如:读一个整数,写一个浮点数等;l无格式读写,以字节为单位读写,不区分其中的内容l例如:读20个字节,写50个字节等;.7缓冲区刷新缓冲区刷新l向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写;也可以通过函数在程序中主动将缓冲区内容写入输出流。.8C+C+中与流操作相关的类中与流操作相

3、关的类及其继承关系及其继承关系iosistreamostreamifstreamiostreamofstreamfstream.9标准流对象标准流对象l输入流对象:cin 与标准输入设备相连l输出流对象:cout 与标准输出设备相连 cerr 与标准错误输出设备相连 非缓冲输出 clog 与标准错误输出设备相连 缓冲输出.10输出流输出流l流插入运算符 cout “Good morning!n”;不刷新缓冲区 cout “Good”;不刷新缓冲区 cout “morning!”;不刷新缓冲区 cout endl;刷新缓冲区 cout 运算符的定义:istream&operator(istrea

4、m&input,A&a).return input;返回的是输入流的引用(引用本身是地址),在读取不成功时,该地址被置成 0.所以可以用如下方法判输入结束:int x;while(cinx).13输入流输入流l成员函数 cin.get()读入一个字符(包括空白字符),返回该字符;cin.get(char*buffer,int size,char delim=n)或者读size 1 个字符入buffer,或者遇到n;在buffer最后加0,分隔符留在输入流.cin.getline(char*buffer,int size,char delim=n)或者读size 1 个字符入buffer,或者遇

5、到n;在buffer最后加0,分隔符从流去掉.cin.eof()返回输入是否结束标志.14输入流输入流l其它函数cin.peek();返回下一个字符,但不从流中去掉.putback(char ch);将字符ch放回输入流ignore(int nCount=1,int delim=EOF);从流中删掉最多nCount个字符,遇到EOF时结束。.15无格式输入输出无格式输入输出l用read,write 进行指定字节数的输入输出const int SIZE=80;char bufferSIZE;cin.read(buffer,20);cout.write(buffer,cin.gcount();/g

6、count返回上次读入的字节数cout endl;输入:Using the read,write and gcount member functionsUsing the read,write and gcount member functions 输出:Using the read,writeUsing the read,write.16流操纵算子流操纵算子l整数流的基数:流操纵算子dec,oct,hex,setbasedec,oct,hex,setbasel浮点数的精度(precision,setprecision)l设置域宽(setw,width)l用户自定义的流操纵算子使用流操纵算子需

7、要#include.17流操纵算子流操纵算子l整数流的基数:流操纵算子dec,oct,hexdec,oct,hex int n=10;cout n endl;cout hex n “n”dec n “n”oct n setprecision(5);/可以连续输出它们的功能相同。指定输出浮点数的有效位数.19 浮点数输出最多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 en

8、dl n endl m;控制浮点数精度的流操纵算子输出:1.23457e+00612.3457123456712.20 以小数点位置固定的方式输出#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;控制浮点数精度的流操纵算子输出:1234567.89000012.345670123456712.21 取消以小数点位置固

9、定的方式输出#include#include using namespace std;int main()double x=1234567.89;cout setiosflags(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;cou

10、t string string;5678 cout string string;cout string endl;.26用户自定义流操纵算子用户自定义流操纵算子ostream&tab(ostream&output)return output t;cout “aa”tab “bb”endl;输出:aa bb为什么可以?.27用户自定义流操纵算子用户自定义流操纵算子因为 iostream 里对 进行了重载(成员函数)ostream&operator (ostream&(*p)(ostream&);.28文件操作文件操作l数据的层次l文件和流l建立顺序文件l文件的读写指针l有格式读写l无格式读写.2

11、9数据的层次数据的层次l位 bitl字节 bytel域/记录例如:学生记录 int ID;char name10;int age;int rank10;l我们将所有记录顺序地写入一个文件,称为顺序文件。.30文件和流文件和流l可以将顺序文件看作一个有限字符构成的顺序字符流,然后象对cin,cout 一样的读写。回顾一下输入输出流类的结构层次:iosistreamostreamifstreamiostreamofstreamfstream.31建立顺序文件建立顺序文件l#include /包含头文件lofstream outFile(“clients.dat”,ios:out|ios:binar

12、y);/打开文件lofstream 是是 fstream中定义的类中定义的类loutFile 是我们定义的是我们定义的ofstream类的对象类的对象l“clients.dat”是将要建立的文件的文件名是将要建立的文件的文件名lios:out 是打开并建立文件的选项是打开并建立文件的选项lios:out 输出到文件输出到文件,删除原有内容删除原有内容lios:app 输出到文件输出到文件,保留原有内容,总是在尾部添加保留原有内容,总是在尾部添加lios:ate 输出到文件输出到文件,保留原有内容,可以在文件任意位置添保留原有内容,可以在文件任意位置添加加 lios:binary 以二进制文件格

13、式打开文件.32建立顺序文件建立顺序文件l也可以先创建ofstream对象,再用 open函数打开 ofstream fout;fout.open(test.out,ios:out|ios:binary);l判断打开是否成功:if(!fout)cerr “File open error!”endl;.33文件的读写指针文件的读写指针l对于输入文件,有一个读指针;l对于输出文件,有一个写指针;l对于输入输出文件,有一个读写指针;l标识文件操作的当前位置,该指针在哪里,读写操作就在哪里进行。.34文件的读写指针文件的读写指针lofstream fout(“a1.out”,ios:ate);llon

14、g location=fout.tellp();l /取得写指针的位置llocation=10L;lfout.seekp(location);l /将写指针移动到第10个字节处lfout.seekp(location,ios:beg);/从头数locationlfout.seekp(location,ios:cur);/从当前位置数locationlfout.seekp(location,ios:end);/从尾部数locationllocation 可以为负值.35文件的读写指针文件的读写指针lifstream fin(“a1.in”,ios:ate);llong location=fin.

15、tellg();l /取得读指针的位置llocation=10L;lfin.seekg(location);l /将读指针移动到第10个字节处lfin.seekg(location,ios:beg);/从头数locationlfin.seekg(location,ios:cur);/从当前位置数locationlfin.seekg(location,ios:end);/从尾部数locationllocation 可以为负值.36字符文件读写字符文件读写因为文件流也是流,所以前面讲过的流的成员函数和流操作算子也同样适用于文件流。写一个程序,将文件 in.txt 里面的整数排序后,输出到out.t

16、xt例如,若in.txt 的内容为:1 234 9 45 6 879则执行本程序后,生成的out.txt的内容为:1 6 9 45 234 879.37#include#include#include using 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=

17、x;i+;qsort(v,i,sizeof(int),cmp);for(int j=0;j i;j+)destFile vj ;destFile.close();srcFile.close();参考程序.38二进制文件读写二进制文件读写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二进制文件读写,直接写二进制数据,记事本看未必二进制文件读写,直接写二进制数据,记事本看未必正确。正确

18、。.39二进制文件读写二进制文件读写/下面的程序从键盘输入几个学生的姓名的成绩,并以二进制/文件形式存起来#include#include using namespace std;class CStudent public:char szName20;int nScore;.40int main()CStudent s;ofstream OutFile(c:tmpstudents.dat,ios:out|ios:binary);while(cin s.szName s.nScore)if(stricmp(s.szName,“exit”)=0)/名字为exit则结束break;OutFile.w

19、rite(char*)&s,sizeof(s);OutFile.close();return 0;.41输入:Tom 60Jack 80Jane 40exit 0则形成的 students.dat 为 72字节,用 记事本打开,呈现:Tom 烫烫烫烫烫烫烫烫 Jack 烫烫烫烫烫烫烫蘌 Jane 烫烫烫烫烫烫烫?.42二进制文件读写二进制文件读写/下面的程序将 students.dat 文件的内容读出并显示#include#include using namespace std;class CStudent public:char szName20;int nScore;.43int main

20、()CStudent s;ifstream InFile(“c:tmpstudents.dat”,ios:in|ios:binary);if(!InFile)cout error endl;return 0;while(InFile.read(char*)&s,sizeof(s)int nReadedBytes=InFile.gcount();/看刚才读了多少字节cout s.szName s.nScore endl;InFile.close();return 0;输出:Tom 60Jack 80Jane 40.44二进制文件读写二进制文件读写/下面的程序将 students.dat 文件的J

21、ane的名字改成Mike#include#include using namespace std;class CStudent public:char szName20;int nScore;.45输出:Tom 60Jack 80Mike 40int main()CStudent s;fstream iofile(c:tmpstudents.dat,ios:in|ios:out|ios:binary);if(!iofile)cout error;return 0;iofile.seekg(2*sizeof(s),ios:beg);/定位写指针到第三个记录iofile.write(Mike,st

22、rlen(Mike);iofile.seekp(0,ios:beg);/定位读指针到开头while(iofile.read(char*)&s,sizeof(s)cout s.szName s.nScore settings-debug-program arguments.48命令行参数命令行参数lint main(int argc,char*argv)l cout argc endl;l for(int i=0;iargc;i+)l cout argvi endl;lreturn 0;ll第一个参数为命令本身,第二个以后为参数.49命令行参数命令行参数若上面程序可执行文件名为 sampl.ex

23、e,则在命令行输入:smaple file1 a.txt s输出结果为4tmp.exe-vtest.txt2.50例子:例子:mycopy 程序,文件拷贝程序,文件拷贝/*用法示例:mycopy src.dat dest.dat 即将 src.dat 拷贝到 dest.dat 如果 dest.dat 原来就有,则原来的文件会被覆盖*/#include#include using namespace std;int main(int argc,char*argv)if(argc!=3)cout File name missing!endl;return 0;ifstream inFile(arg

24、v1,ios:binary|ios:in);/打开文件用于读if(!inFile)cout Source file open error.endl;return 0;ofstream outFile(argv2,ios:binary|ios:out);/打开文件用于写if(!outFile)cout New file open error.endl;inFile.close();/打开的文件一定要关闭return 0;char c;while(inFile.get(c)/每次读取一个字符outFile.put(c);/每次写入一个字符outFile.close();inFile.close()

25、;return 0;.51ifstream inFile(argv1,ios:binary|ios:in);/打开文件用于读if(!inFile)cout Source file open error.endl;return 0;ofstream outFile(argv2,ios:binary|ios:out);/打开文件用于写if(!outFile)cout New file open error.endl;inFile.close();/打开的文件一定要关闭return 0;char c;while(inFile.get(c)/每次读取一个字符outFile.put(c);/每次写入一个字符outFile.close();inFile.close();return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(程序设计实习概要课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|