2022年c,,课件第十三章输入输出流1.docx

上传人:h**** 文档编号:25572685 上传时间:2022-07-12 格式:DOCX 页数:59 大小:36.17KB
返回 下载 相关 举报
2022年c,,课件第十三章输入输出流1.docx_第1页
第1页 / 共59页
2022年c,,课件第十三章输入输出流1.docx_第2页
第2页 / 共59页
点击查看更多>>
资源描述

《2022年c,,课件第十三章输入输出流1.docx》由会员分享,可在线阅读,更多相关《2022年c,,课件第十三章输入输出流1.docx(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2022年c,课件第十三章输入输出流1 第 第 3 13 章 输入输出流 13.1 C+ 的输入和输出 1 13.1.1 输入输出的含义 (1) 对系统指定的标准设备进行输入和输出。 (2) 以外存磁盘文件为对象进行输入和输出。 (3) 对内存指定的空间进行输入和输出。 13.1.2 C+的 的 O I/O 对 对 C C 的发展 类型平安和可扩展性 13.1.3 C+ 的输入输出流 m 1. iostream 类库中有关的类 图 图 13.1 图 图 13.2 图 图 13.3 2. 与 与 m iostream 类库有关的头文件 iostream fstream strstream std

2、iostream ioma nip 3. 在 在 m iostream 头文件中定义的流对象 4. 在 在 m iostream 头文件中重载运算符 ostream operator lt;lt; (char *); / 用于向输出流插入一个字符串 coutlt;lt; C+ ; ; 相当于 cout.operatorlt;lt;( C+ ); 对于自己的类,可用 1 11 章的方法进行重载。 2 13.2 标准输出流 13.2.1 cout ,r cerr 和 和 g clog 流 1. t cout 流对象 t cout 流是流向显示器的数据。 输出基本类型数据时,可以不考虑数据的类型是什

3、么。 t cout 流在内存中对应开拓 了一个缓冲区,用来存放流中的数据,当向 t cout 流插入一个 l endl 时,不论缓冲区是否已满,都马上输出流中的全部数据,然后插入一个换行符,并刷新流。 2. r cerr 流对象 r cerr 。 流是标准错误流。r cerr 。 流被指定与显示器关联。 cout流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。 例 例 13.1 解一元二次方程 ax2 2 +bx+c=0 #include lt;iostreamgt; #include lt;math.hgt; using namespace std; void main() flo

4、at a, b,c,disc; coutlt;lt;please input a,b,c:; cingt;gt;agt;gt;bgt;gt;c; if (a=0) cerrlt;lt;a is equal to zero,error!lt;lt;endl; else if (disc=b*b- - 4*a*c)lt;0) cerrlt;lt;disc=b*b- - 4*a*clt;0lt;lt;endl; else coutlt;lt;x1=lt;lt;(- - b+sqrt(disc)/(2*a)lt;lt;endl; coutlt;lt;x2=lt;lt;(- -b b- - sqrt(d

5、isc)/ (2*a)lt;lt;endl; please input a,b,c:0 2 3 a is equal to zero,error! please input a,b,c:5 2 3 disc=b*b- - 4*a*clt;0 please input a,b,c:1 2.5 1.5 x1=- -1 1 x2=- - 1.5 g 3. clog 流对象 g clog 流也是标准错误流,也是在显示器上显示出错信息。与 与 r cerr 的微小区分是:r cerr 不经缓冲区,干脆向显示器上输出有关信息,而 g clog 中的信息存放在缓冲区中,缓冲区满后或遇到 enl dl 时向显

6、示器输出。 2 13.2.2 格式输出 1. 运用限制符限制输出格式 例 例 2 13.2 用限制符限制输出格式 #include lt;iostreamgt; #include lt;iomanipgt; using namespace std; int main() int a; coutlt;lt;input a:; cingt;gt;a; coutlt;lt;dec:lt;lt;declt;lt;alt;lt;endl; coutlt;lt;hex:lt;lt;hexlt;lt;alt;lt;endl; coutlt;lt;oct:lt;lt;setbase(8)lt;lt;alt;l

7、t;endl; char *pt=China; coutlt;lt;setw(10)lt;lt;ptlt;lt;endl; coutlt;lt;setfill(*)lt;lt;setw(10)lt;lt;ptlt;lt;endl; double pi=22.0/7.0; coutlt;lt;setiosflags( ios:scientific )lt;lt;setprecision(8); coutlt;lt;pi=lt;lt;pilt;lt;endl; coutlt;lt;pi=lt;lt;setprecision(4)lt;lt;pilt;lt;endl; coutlt;lt;pi=lt

8、;lt;setiosflags(ios :fixed)lt;lt;pilt;lt;endl; return 0; input a:34 dec:34 hex:22 oct:42 China *China pi=3.14285734e+000 pi=3.1429e+000 pi=3.143 2. 用流对象的成员函数限制输出格式 例 例 13.3 用流限制成员函数输出数据。 #include lt;iostreamgt; using namespace std; void main() int a=21; cout.setf(ios:sh owbase); coutlt;lt;dec:lt;lt;

9、alt;lt;endl; cout.unsetf(ios:dec); cout.setf(ios:hex); coutlt;lt;hex:lt;lt;alt;lt;endl; cout.unsetf(ios:hex); cout.setf(ios:oct); coutlt;lt;oct:lt;lt;alt;lt;endl; char *pt=China; cout.width(10); coutlt;lt;ptlt;lt;endl; cout.width(10); cout.fill(* ); coutlt;lt;ptlt;lt;endl; double pi=22.0/7.0; cout.s

10、etf(ios:scientific); coutlt;lt;pi=; cout.width(14); coutlt;lt;pilt;lt;endl; cout.unsetf(ios:scientific); cout.setf(ios:fixed); cout.width(12); cout.setf(ios:showpos); cout.setf(ios:internal); cout.precis ion(6); coutlt;lt;pilt;lt;endl; dec:21 hex:0x15 oct:025 China *China pi=*3.142857e+000 +*3.14285

11、7 3 13.2.3 用流成员函数 t put 输出字符 t put 是用于输出单个字符的成员函数。 cout.put( a ); cout.put(65+32); 例 例 13.4 有一个字符串 BASIC, ,。 要求把它按相反的依次输出。 #include lt;iostreamgt; using namespace std; int main() char *a=BASIC; for(int i=4;igt;=0;i -) ) cout.put(*(a+i); cout.put( n); return 0; 也可以用 r putchar 函数实现。 #include lt;iostre

12、amgt; int main() char *a=BASIC; for(int i=4;igt;=0;i -) ) putchar(*(a+i); putchar( n); return 0; 3 13.3 标准输入流 n 13.3.1 cin 流 可以通过测试 n cin 的值,推断流对象是否处于正常状态和提取操作是否胜利。 if(!cin) cerrlt;lt; error; ; 例 例 13.5 通过测试 n cin 。 的值,推断流对象是否处于正常状态。 #include lt;iostreamgt; using namespace std; void main() float gra

13、de; coutlt;lt;enter grade:; while(cingt;gt;grade) if(gradegt;=85) coutlt;lt;gradelt;lt; GOOD!lt;lt;endl; i i f(gradelt;60) coutlt;lt;gradelt;lt; fail!lt;lt;endl; coutlt;lt;enter grade:; coutlt;lt;The end.lt;lt;endl; enter grade:67 enter grade:89 89 GOOD! enter grade:56 56 fail! enter grade:101 101 G

14、OOD! enter grade:w The end. 2 13.3.2 用于字符输入的流成员函数 1. 用 用 t get 函数读入一个字符 不带参数的 t get 函数 cin.ge t(); 用来从指定的输入流中提取一个字符,函数返回值就是读入的字符。若遇到文件结束符 CTRL+Z, , 则函数返回文件结束标记 EOF , , 一般以- -1 1代表 EOF 。 例 例 13.6 用 用 t get 函数读入字符。 #include lt;iostreamgt; using namespace std; void main() char c; coutlt;lt;enter a sent

15、ence:lt;lt;endl; while(c=cin.get()!=EOF) cout.put(c); enter a sentence: I study C+ very hard. I study C+ very hard. 有一个参数的 t get 函数 cin.get(ch); 量 其作用是从输入流中读取一个字符,赋给字符变量 ch 。读取胜利返回真,失败返回假。 #include lt;iostreamgt; using namespace std; void main() char c; coutlt;lt;enter a sentence:lt;lt;endl; while(c

16、in.get(c) cout.put(c); coutlt;lt;endlt;lt;endl; 有三个参数的 t get 函数 cin.get( 字符指针, , 字符个数 n, 终止字符) ) 其作用是从输入流中读取 n n- -1 1 个字符,赋值个指定的字符取 指针指向的地方。假如在读取 n n- -1 1 个字符之前遇到指定的终止字符,则提前结束读取。假如读取胜利则函数返回非,如失败返回 0 0 。 #include lt;iostreamgt; using namespace std; void main() char ch20; coutlt; lt;enter a sentence

17、:lt;lt;endl; cin.get(ch,10, n); coutlt;lt;chlt;lt;endl; enter a sentence: I study C+ very hard. I study C t get 函数的第三个参数可以省略,此时默认为’ n n’ 。 2. 用成员函数 e getline 函数读入一行字符 e getline 成员函数的作用是从输入流中读取一行字符, , 其用法与带三个参数的 t get 函数类似。 例 例 13.7 用 用 e getline 函数读入一行字符。 #include lt;iostrea mgt; using n

18、amespace std; void main() char ch20; coutlt;lt;enter a sentence:lt;lt;endl; cingt;gt;ch; coutlt;lt;The string read with cin is:lt;lt;chlt;lt;endl; cin.getline(ch,20,/); coutlt;lt;The second part is:lt;lt;chlt;lt;endl; cin.getline(ch,20); coutlt;lt;The third part is: lt;lt;chlt;lt;endl; enter a sente

19、nce: I like C+./I study C+./I am happy. The string read with cin is:I The second part is: like C+. The third part is:I study C+./I am h 下一个 e getline 。 函数将从该终止标记的下一个字符起先读入。 m 13.3.3 istream 类的其他成员函数 1. eof 函数 从输入流中读取数据,假如到达文件末尾,f eof 函数值为真 ,否则为假。 例 例 13.8 逐个读入一行字符,将其中的非空格字符输出。 #include lt;iostreamgt

20、; using namespace std; void main() char c; while(!cin.eof() if(c=cin.get()!= ) cout.put(c); C+ is very interesting. C+isveryinteresting. 2. k peek 函数 c=cin.peek(); 函数的返回值是指针指向的当前字符,但它只是观测,指针仍停留在 当前位置,并不后移。 3. k putback 函数 cin.putback(ch); 其作用是将前面用 t get 或 e getline 函数从输入流中读取的字符返回到输入流,插到当前指针位置,以供后面读取

21、。 例 例 13.9 k peek 函数和 k putback 函数的用法。 #include lt;iostreamgt; using namespace std; void main() char c20; int ch; coutlt;lt;please enter a sentence.lt;lt;endl; cin.getline(c,15, /); coutlt;lt;The first part is:lt;lt;clt;lt;endl; ch=cin.peek(); coutlt;lt;The next character(ASCII code) is:lt;lt;chlt;l

22、t;endl; cin.putback(c0); cin.getline(c,15,/); coutlt;lt;The second part is:lt;lt;clt;lt;endl; please enter a sentence. I am a boy./ am a student./ The first part is:I am a boy. The next character(ASCII code) is:32 The second part is:I am a student 图 图 13.4 4. e ignore 函数 cin.ignore(n, 终止字符) ) 函数的作用是

23、跳过输入流中的 n n 个字符,或遇到指定的终止字符时提前结束。 ignore(5,’A A’ ); / 跳过输入流中的 5 5 个字符,遇到A A ’后提前结束。 ignore(); 相当于 ignore(1,EOF); 例 例 13 .10 用 用 e ignore 函数跳过输 入流中的字符。 不用 e ignore 函数的状况。 #include lt;iostreamgt; using namespace std; void main() char ch20; cin.get(ch,20,/); coutlt;lt;The first part is

24、:lt;lt;chlt;lt;endl; cin.get(ch,20,/); coutlt;lt;The second part is:lt;lt;chlt;lt;endl; I like C+./I study C+./I am happy. The first part is:I like C+. The second part is: #include lt;iostreamgt; using namespace std; void main() char ch20; cin.get(ch,20,/); coutlt;lt;The first part is:lt;lt;chlt;lt;

25、endl; cin.ignore(); cin.get(ch,20,/); coutlt;lt;The second part is:lt;lt;chlt;lt;endl; I l ike C+./I study C+./I am happy. The first part is:I like C+. The second part is:I study C+. 4 13.4 文件操作与文件流 1 13.4.1 文件的概念 文件:一般是存储在外部介质上的数据的集合。 I ASCII 文件:它的每一个字节放一个 I ASCII 代码,代表一个字符,也称文本文件。用于存储字符信息。 二进制文件:是

26、把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。例如整数 101000 图 图 13 .5 2 13.4.2 文件流类与文件流对象 文件流是以外存文件为输入输出对象的数据流。输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。每一个文件流都有一个内存缓冲区与之对应。 用于文件操作的文件流类: m ifstream 类,是从 m istream 类派生的。用来读磁盘文件 。 m ofstream 类,是从 m ostream 类派生的。用来写磁盘文件 。 m fstream 类,是从 m iostream 类派生的。用来读、写磁盘文件。 。 t ofstream

27、 out 建立一个输出文件流对象。 3 13.4.3 文件的打开与关闭 1. 打开磁盘文件 调用文件流成员函数 open 。 ofstream out 建立一个输出文件流对象。 out( f1.dat ,ios:out); 使输出文件流 t out 文件建立关联,此时 t f1.dat 是一个输出文件,用于接收从内存输出的数据。 调用成员函数 n open 的一般格式为: : 文件流对象 .open( 磁盘文件名,输入输出方式 ); 在定义文件流时指定参数 ofstream outfile( f1.dat ,ios:out); 作用与 n open 函数相同。 说明: 新 版 本 O I/O

28、供 类 库 中 不 提 供 ios:nocree ate 和ios:noreplace 。 每一个打开的文件都有一个文件指针,该指针的初始位置由 O I/O 方式确定,每次读写都从文件指针的当前位置起先。每读入一个字节,指针就后移一个字节。当文件指针移到最符 后,就会遇到文件结束符 CTRL+Z回 ,此时一般返回 EOF 。此时流对象的成员函数 f eof 的值为真, ,。 表示文件结束了。 可以用位或运算符| | 对输出方式进行组合。 ios:in|ios:nocreate 假如打开操作失败,n open 函数的返回值为 0 0 , 假如是调用构造函数的方式打开文 件的,则流对象的值为 0

29、0 。可以据此推断打开是否胜利。 if(out( f1.dat ,ios:app)=0) coutlt;lt; open error ; ; if(!out( f1.dat ,ios:app) coutlt;lt; open error ; ; 2. 关闭磁盘文件 关闭文件的成员函数 close 。 out(); 所谓的关闭,就是解除该磁盘文件与文件流对象的关联。此时,该文件流对象就可以和其它磁盘文件关联。 4 13.4.4 对 对 I ASCII 文件的操作 对 对 I ASCII 文件的读写操作可以用以下两种方法: 用流插入运算 符 lt;lt; 和流提取运算符 gt;gt; 输入输 出标

30、准类型的数据。 数 用流的成员函数 e put,get,getline 等进行输入和输出。 例 例 13.11 有一个整型数组,含 0 10 个元素,从键盘输入 0 10 个整数给数组,将此数组送到磁盘文件中存放。 #include lt;iostreamgt; #include lt;fstreamgt; using namespace std; void main() int a10; ofstream outfile(f1.dat); /ofstream outfile(f1.dat ,io s:out ); if(!outfile) cerrlt;lt;open error!lt;lt

31、;endl; exit(1); coutlt;lt;enter 10 integer numbers:lt;lt;endl; for(int i=0;ilt;10;i+) cingt;gt;ai;outfilelt;lt;ailt;lt; ; out(); enter 10 integer numbers: 1 3 5 2 4 6 10 8 7 9 例 例 13.12 从例 1 13.11 建立的数据文件 t f1.dat 中读入 0 10 个 整数放在数组中,找出并输出 0 10 个数中的最大者和它在数组中的序号。 #include lt;iostreamgt; #include lt;fs

32、treamgt; using namespace std; void main() int a10,max,i,order; ifstream infile(f1.dat,ios:in); if(!infile) cerrlt;lt;open error!lt;lt;endl;exit(1); for(i=0;ilt;10;i+) infilegt;gt;ai;cout lt;lt;ailt;lt; ; coutlt;lt;endl; max=a0; order=0; for(i=1;ilt;10;i+) if(aigt;max) max=ai;order=i; coutlt;lt;max=l

33、t;lt;maxlt;lt;endllt;lt;order=lt;lt;orderlt;lt;endl; in(); 1 3 5 2 4 6 10 8 7 9 max=10 order=6 例 例 13.13 从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件 t f2.dat 中。再把它从磁盘文件读入程序,将其中的小写字母改写为大写字母,再存入磁盘文件 f3.dat 。 #include lt;iostreamgt; #include lt;fstreamgt; using namespace std; void save_to_file() ofstream outfile(f2.da

34、t); if(!outfile) cerrlt;lt;open f2.dat error!lt;lt;endl;exit(1); char c80; cin.getline(c,80); for(int i=0;ci;i+) i i f(cigt;=65 amp;amp; cilt;=90|cigt;=101 amp;amp; cilt;=122) out(ci);coutlt;lt;ci; coutlt;lt;endl; out(); void get_from_file() char ch; ifstream infile(f2.dat,ios:in); if(!infile) cerrl

35、t;lt;open f2.dat error!lt;lt;endl;exit(1); ofstream outfile(f3.dat); if(! outfile) cerrlt;lt;open f3.dat error!lt;lt;endl;exit(1); while(in(ch) if(chgt;=101 amp;amp; chlt;=122) ch=ch- - 32; out(ch); coutlt;lt;ch; coutlt;lt;endl; in(); out(); void main() save_to_file(); get_from_file(); New Beijing,G

36、reat Olympic,2022,China. NewBei jingGreatOlympicChina NEWBEIJINGGREATOLYMPICCHINA #include lt;iostreamgt; #include lt;fstreamgt; using namespace std; void display_ *) ifstream in); if(!infile) cerrlt;lt;open error!lt;lt;endl;exit(1); char ch; while(in(ch) cout.put(ch); coutlt;lt;endl; in(); void main() display_file(f3.dat); NEWBEIJINGGREATOLYMPICCHINA 5 13.4.5 对二进制文件的操作 1. 用成员函数 d read 和 和 e write 读写二进制文件 istreamamp;

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

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁