C程序设计教程与实验指导杨国兴输入输出流.ppt
《C程序设计教程与实验指导杨国兴输入输出流.ppt》由会员分享,可在线阅读,更多相关《C程序设计教程与实验指导杨国兴输入输出流.ppt(47页珍藏版)》请在三一办公上搜索。
1、C+语言程序设计,杨国兴 张东玲 彭涛,中国水利水电出版社,第8章 输入/输出流,8.1 输入/输出流概述8.2 插入运算符及提取运算符8.3 格式化输入输出8.4 文件的输入输出8.5 输入输出文件流fstream,8.1 输入/输出流概述,流的概念“流”是一种抽象的形态,指的是计算机里的数据从一个对象流向另一个对象。这里数据流入和流出的对象通常是指计算机中的屏幕、内存、文件等一些输入输出设备。数据的流动就是由I/O流类来实现的。如预定义流对象cin和cout实现的数据流动过程:C+中的I/O流负责建立程序与设备对象之间的连接,它像一个桥梁,沟通了数据的产生者和消费者,使他们之间产生数据的流
2、动。,第8章 输入/输出流,8.1 输入/输出流概述,流类库的结构,第8章 输入/输出流,ostream,ios,istream,iftream,istrstream,istringstream,oftream,ostrstream,ostringstream,iostream,fstream,strstream,stingstream,第8章 输入/输出流,I/O流类说明表,8.1 输入/输出流概述,流类库的结构(续)流类库中与文件输入输出相关的文件流类结构:,第8章 输入/输出流,8.2 插入运算符与提取运算符,1.插入运算符 插入运算符“”:通常用于插入数据到一个输出流对象中,流对象再进
3、一步将数据输出到它所关联的设备中。如:cout“Hello World!”插入运算符“”适用于任何输出流对象,如输出文件流ofstream的对象等。“”右侧可以是任何标准数据类型的变量及常量,也可以是字符串变量及常量。如:cout i s 3.14 f;,第8章 输入/输出流,8.2 插入运算符与提取运算符,2.提取运算符 提取运算符“”:通常用于从输入流对象中提取数据。如:int i;char buf100;cin i;cin buf;提取运算符“”适用于任何输入流对象,如输入文件流ifstream的对象等。“”右侧可以是任意标准数据类型的变量,也可以是字符串变量。注意:使用提取运算符“”提
4、取数据时,以空白符(如空格、回车、tab)作为数据的分割符,因此提取字符串数据时,不能提取空白字符。,第8章 输入/输出流,8.3 格式化输入输出,C+中的I/O流可以完成输出/输入的格式化操作,如设置域宽、设置精度及整数进制等。设置输入输出格式的方法:使用流操纵元,只需把流操纵元插入(提取)到输出流(输入流)中即可对输出流(输入流)进行格式化,如setiosflags、setw、setfill、setprecision、hex、oct等,使用流操纵元时需在程序中包含头文件iomanip 通过流的成员函数,即由流对象直接调用完成格式化,如setf、unsetf、width、fill、preci
5、sion等。使用流成员函数的优点是在设置格式同时,可以返回以前的设置,便于恢复原来的设置。,第8章 输入/输出流,8.3 格式化输入输出,8.3.1 输出宽度控制:setw和width 使用流操纵元setw和成员函数width可以控制当前域宽(即输入/输出的字符数)。注意:(1)宽度的设置仅适用于下一个插入或读取的数据。(2)在输出流中控制域宽,如果输出数据的宽度比设置的域宽小,将以默认右对齐方式输出数据,左边空位会用填充字符来填充(填充字符默认是空格)。(3)如果输出数据的宽度比设置的宽度大,数据不会被截断,将输出所有位数。,第8章 输入/输出流,例8.1 使用setw操纵元控制域宽,#in
6、clude#include using namespace std;void main()cout 123 endl;cout setw(5)4.5 6.7 endl;,程序运行结果为:123,第8章 输入/输出流,例8.2 使用width成员函数控制域宽,#include using namespace std;void main()char*str3=“abc”,“abcde”,“abcdef”;for(int i=0;i 3;i+)cout.width(5);cout stri endl;,程序运行结果为:abcabcdeabcdef,第8章 输入/输出流,8.3 格式化输入输出,8.3
7、.2 填充字符控制:setfill和fill 在缺省情况下,如果域宽大于数据宽度时,填充多余空间的字符是空格。如果要改变填充字符,可以使用流操纵元setfill和成员函数fill。注意:设置了填充字符后,将对程序后面的输出代码产生永久影响,直到下一次再改变填充字符为止。,第8章 输入/输出流,例8.3 使用setfill控制填充字符,#include#include using namespace std;void main()double values=1.23,15.16,653.7,4358.24;cout setfill(*);for(int i=0;i 4;i+)cout setw(
8、10)valuesi endl;,程序运行结果为:123,第8章 输入/输出流,8.3 格式化输入输出,8.3.3 输出精度控制:setprecision和precision 使用流操纵元setprecision以及成员函数precision可以控制浮点数输出的精度。注意:精度一旦设置,就可以用于以后所有输出的数据,直到下次精度发生改变。使用成员函数precision可以返回设置前的精度。,第8章 输入/输出流,例8.4 控制浮点数精度,#include#include using namespace std;void main()double value=31.4142743;int Pre
9、precision=cout.precision(4);cout value endl;cout setprecision(Preprecision)value endl;,程序运行结果为:31.4131.4143,第8章 输入/输出流,8.3 格式化输入输出,8.3.3 输出精度控制(续)所设置的精度值,在程序没有设置计数法情况下,表示浮点数的有效数字的个数。若程序设置了计数法(ios:fixed或ios:scientific),则表示小数点后数字的个数。ios:fixed 表示以定点法输出浮点数(不带指数)。ios:scientific 表示以科学计数法输出浮点数。,第8章 输入/输出流,
10、例8.4(续一),#include#include using namespace std;void main()double value=31.4142743;cout setiosflags(ios:fixed);int Preprecision=cout.precision(4);cout value endl;cout setprecision(Preprecision)value endl;,程序运行结果为:31.414331.414274,第8章 输入/输出流,例8.4(续二),#include#include using namespace std;void main()doub
11、le value=31.4142743;cout setiosflags(ios:scientific);int Preprecision=cout.precision(4);cout value endl;cout setprecision(Preprecision)value endl;,程序运行结果为:3.1414e+0013.141427e+001,第8章 输入/输出流,8.3 格式化输入输出,8.3.4 其他格式状态 上例中的setiosflags也是一个流操纵元,定义在头文件中。通过将setiosflags的参数设置为各种不同流格式状态标志值,可以对相应的输入输出格式进行控制。若需
12、要同时设置多个标志位时,可以使用按位或运算符(|)将不同的标志项结合。,第8章 输入/输出流,第8章 输入/输出流,I/O流格式状态标志,例8.5 使用setiosflags控制流格式,#include#include using namespace std;void main()int x=200;cout setiosflags(ios:internal|ios:showpos);cout setw(10)x endl;cout setiosflags(ios:hex|ios:uppercase|ios:showbase);cout setw(10)x endl;cout oct setw
13、(10)x endl;,第8章 输入/输出流,程序运行结果为:+2000X C80 310,8.3 格式化输入输出,8.3.4 其他格式状态(续)使用流操纵元setiosflags设置相应的标志位后,对流对象产生的影响是持久的,若想恢复以前的默认设置,可以通过resetiosflags流操纵元关闭相应的标志位。如:cout resetiosflags(ios:internal|ios:showbase);可以取消对域中对齐格式的设置,同时取消显示数制标志,恢复系统默认格式。,第8章 输入/输出流,8.4 文件的输入输出,处理文件输入输出的流类主要有ofstream、ifstream和fstre
14、am三个类。均定义在fstream中。向文件输出数据即将数据保存到文件中时,要使用ofstream类;从文件中读取数据即从文件中输入数据时,要使用ifstream类。而使用fstream类可以同时进行输入及输出操作。文件输入输出的一般步骤为:创建流对象并打开文件 读写文件 关闭文件,第8章 输入/输出流,8.4 文件的输入输出,8.4.1 打开文件 1.使用默认构造函数,然后调用open函数 用法如下:文件I/O流类名 流对象名;/声明一个流对象 流对象名.open(文件名,打开方式);/调用open函数打开文件 如:ofstream my_file;my_file.open(“boot.in
15、i”,ios:out);参数“文件名”:用于指定要打开文件的文件名 若为不带路径的文件名表示与当前应用程序在同一文件夹 若带路径的文件名,注意 应用 表示,第8章 输入/输出流,8.4 文件的输入输出,8.4.1 打开文件(续一)参数“打开方式”:用于指定文件的打开方式,第8章 输入/输出流,8.4 文件的输入输出,8.4.1 打开文件(续二)2.在构造函数中直接指定文件名及打开方式 用法如下:文件I/O流类名 流对象名(文件名,打开方式);如:ifstream infile(“D:hello.dat”,ios:binary);,第8章 输入/输出流,如果使用以上两种方法打开文件不成功(如文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程 实验 指导 杨国兴 输入输出
链接地址:https://www.31ppt.com/p-5426167.html