c++11-流类库与输入输出

合集下载

《C++程序设计》电子教案第10章 流类库与输入输出

《C++程序设计》电子教案第10章  流类库与输入输出

C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };

《面向对象程序设计C++》课程标准

《面向对象程序设计C++》课程标准

《面向对象程序设计》课程标准一、课程概述《面向对象程序设计》是计算机科学与技术专业的重要专业课程。

当前面向对象方法已逐渐取代面向过程方法成为程序设计领域的主流技术,这是程序设计发展历史的一个里程碑。

本课程的教学目标是以C++语言为工具,向学生介绍面向对象程序设计语言与面向对象程序设计方法。

通过课堂教学、课外练习与上机实习相结合,使学生在程序设计方法、程序设计语言与程序设计工具三方面受到严格、系统的训练,培养学生更系统、更严密地分析问题和解决问题的思维能力,从而能熟练地利用计算机解决实际问题,为后续专业课程打下扎实的基础。

通过本课程的教学,要求学生:(1)牢固掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;(2)掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制;(3)对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范,其他面向对象程序设计语言有所了解。

本课程的先修课程为“计算机导论”、“C语言”,后续课程主要是“数据结构与算法”、“编译原理”与“软件工程”。

二、课程目标1.知道《面向对象程序设计》这门学科的性质、地位、研究范围、学科进展和未来方向等。

对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范、其他面向对象程序设计语言有所了解。

2.理解该门学科的主要概念、基本原理和策略等。

3.掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制。

4.能够把所学的原理应用到具体的实践中去,如能利用C++语言编写程序解决一些具体的问题,培养学生发现、分析和解决问题的能力等。

三、课程内容和教学要求这门学科的知识与技能要求分为知道、理解、掌握、学会四个层次。

这四个层次的一般涵义表述如下:知道———是指对这门学科和教学现象的认知。

C++:流类库与输入输出

C++:流类库与输入输出

C++:流类库与输⼊输出7.2.1 C++的输⼊输出流ios:流基类(抽象类)istream:通⽤输⼊流类和其他输⼊流的基类ostream:通⽤输出流类和其他输出类的基类iostream:通⽤输⼊输出流类和其他输⼊输出流类的基类(以下的派⽣类对象有cin、cout、cerr、clog)ifstream:输⼊⽂件流类ofstream:输出⽂件流类fstream:输⼊输出⽂件流istrstream:输⼊字符串流类ostrstream:输出字符串流类strstream:输⼊输出字符串类iostream_withassign: 通⽤输⼊输出流类和其他输⼊输出流类iostream的的派⽣类7.2.2 预定义的流对象C++中包含⼏个预定义的流对象,它们是标准输⼊流对象cin、标准输出流对象cout、⾮缓冲型的标准出错流对象ceer、缓冲型的标准出错流对象clogcin是istream的派⽣类istream_withassign的对象,它与标准输⼊设备(通常是键盘)相联系。

cout是ostream的派⽣类ostream_withassign的对象,它与标准输出设备(通常是显⽰器)相联系。

ceer是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。

clog是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。

由于istream和ostream类都在头⽂件iostream中声明的,因此只要在程序中包含头⽂件iostream.h,C++程序开始时这四个标准流对象的构造函数都被⾃动调⽤。

7.2.3 输⼊输出流的成员函数(1)put函数put函数⽤于输出⼀个字符格式:cout.put(char ch)例如:cout.put('A')===cout.put(65)===cout.put(25+40)(2)get函数get函数的功能与提取运算符>>类似,主要不同之处是get函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。

第7章 输入输出流

第7章 输入输出流

第7章 输入输出流
第7章 输入输出流
(2)返回流是否处于正常状态 :int fail() const; 该函数返回failbit状态,以判断流操作是否失败。failbit表 示发生流格式错误,但缓冲区中的字符没有丢失。这种错误通常 是可以修复的。 (3)判断流是否正常 int good()const; int operator void *(); 上述两个函数的功能相似,如果eofbit、failbit和badbit全 部都没有被置位[即均为 0,读写正常(即符合读取和写入的类 型),没有文件末尾],则返回1 (true),否则返回0 (false)。
第7章 输入输出流
C++程序设计
第7章 输入输出流
第7章 输入输出流
流类简介 标准流对象 控制 I/O 格式 调用cout的成员函数 调用cin的成员函数
本章内容
第7章 输入输出流
第一节 流类简介
常考知识点: C++流的基本概念 iostream中流类库的基本概念 主要头文件的基本功能 提取运算符>>的使用 插入运算符<<的使用
(1)返回流是否结束: int eof() const; 函数返回eofbit的值。当文本文件结束时,在输入流中会 自动设置eofbit。在应用程序中可以用eof( )函数测试是否到达 文件尾,当文件操作结束遇到文件尾时,函数返回1;否则返回0。 在标准输入流cin中,可以通过按下〈Ctrl+Z〉组合键表示 输入流的结束。
第7章 输入输出流
(3)设置和返回输出宽度 int width(int nw); 该函数将下一个输出项的显示宽度设置为nw。如果nw大于 数据所需宽度,则在没有特别指示时数据采用右对齐方式。如果 nw小于数据所需宽度,则nw无效,数据以默认格式输出。函数 width()的设置没有持续性,输出一项数据后自动恢复为系统默 认设置。

第8章_C++流与输入输出new

第8章_C++流与输入输出new
– 与输入设备相联系的流称为输入流,cin是标准输入流。 – 与输出设备相联系的流称为输出流,cout 是最常用的标准输 出流。另外,输出流中还有cerr和clog这两种标准出错流。 – 与输入/输出设备相联系的流称为输入/输出流。
8.1 I/O流的概念及流类库
10:40
计算机软件教学中心
• C++语言中数据的输入/输出,包括三个方面:
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• 【例8.5】自定义输出控制符函数的定义以及 调用示例。
int main() { cout <<10 <<endl << setup << 10<<endl; return 0; }
程序的运行结果是: 10 10$$$$$$$$
10:40
计算机软件教学中心
– istream和ostream提供了流库的主要输入/输出 – 是研究流库的关键
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• istream类
– istream类重载了get函数。 例如:istream & istream::get( signed char *,int len,char='\n'); 从流中将字符输入到给定的char *,直到遇到分界 符、文件结尾或已读完(len-1)个字节为止。
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• C++语言中使数据流动的方法 :
– 使用在标准输入输出头文件stdio.h中声明的库函 数 – 使用在输入输出流类文件iostream.h中定义的流 对象cin和cout – 使用插入运算符“<<” cout << 输出项; – 使用提取运算符“>>” cin >> 变量名;

c++流类库与输入输出习题答案

c++流类库与输入输出习题答案

1.概念填空题1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。

其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。

1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。

1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。

C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。

1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。

前者存取的最小信息单位为字节,后者记录。

1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。

文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。

1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。

文本文件的输出可用cout将字符插入到输出文件流来实现。

程序在处理文本文件时需要(需要/不需要)对数据进行转换。

1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。

二进制文件的输入输出分别采用read()、write() 成员函数。

这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。

1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。

2 简答题2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数?2.2 文件的使用有它的固定格式,试做简单介绍。

2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式?2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。

2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题?2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件?2.7 怎样使用istream和ostream的成员函数来实现随机访问文件?3.选择题3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。

C++程序设计基础课后习题答案

C++程序设计基础课后习题答案

C++程序设计基础(第5版)(上)习题与解答第1章练习题同步练习1.1一、选择题1.一个最简单的C++程序,可以只有一个( )。

(A )库函数(B )自定义函数(C )main 函数(D )空函数2.函数名是( ),用于识别和调用函数。

(A )关键字(B )标识符(C )常数(D )语句3.用C++语言编写的源程序要成为目标程序必须要经过( )。

(A )解释(B )汇编(C )编辑(D )编译4.C++程序中的简单语句必须以( )结束。

(A )冒号(B )分号(C )空格(D )花括号5.程序中把表达式“a+0.5”写为“a*0.5”,是( )错误。

(A )编译(B )连接(C )运行(D )逻辑【解答】CBDBD二、程序练习用一个简单问题,练习程序的书写格式。

(1)问题输入一个摄氏温度值,转换输出华氏温度值。

转换公式为:9325F C =+式中,F 是华氏温度值,C 是摄氏温度值。

想一想,应该如何正确把转换公式写成C++表达式。

(2)分析首先,分析本问题需要的数据表示和数据处理。

数据:摄氏温度C ,华氏温度F 。

处理:输入C ;计算F ;输出C和F。

然后,逐步细化:① 说明变量C和F;② 显示提示输入摄氏温度值的信息;③ 从键盘输入C的值;④ 通过转换公式计算F的值;⑤ 以清晰的说明输出C和F。

(3)编写代码简单程序语法格式:程序与外部连接表示主函数程序中需要连接系统的输入/输出流类库。

使用VC 2010,要用宏指令包含头文件,使用标准名空间的using语句。

主函数定义包括函数头和函数体。

程序框架:#include<iostream>using namespace std;int main(){//语句序列}根据以上分析写出一个完整的程序,并在集成开发环境编译执行。

运行结果如下:请输入摄氏温度 C:26.5摄氏温度 C=26.5华氏温度 F=79.7【解答】#include<iostream>using namespace std;int main(){double C,F;cout<<"请输入摄氏温度 C:\n";cin>>C;F=(9.0/5)*C+32;cout<<"摄氏温度 C="<<C<<endl;cout<<"华氏温度 F="<<F<<endl;}想一想把程序中的语句F=(9.0/5)*C+32;改为F=(9/5)*C+32;测试一下,程序计算结果将会有什么错误?想想为什么?同步练习1.21.在下列选项中,全部都是C++关键字的选项为( )。

C++

C++

上面这4个函数也可以用于文本文件的读写
1
3、检测文件结束 可以使用eof()函数来检测文件是否到达文件尾的标志位EOF 该函数的原型是 int eof( ); 示例:
ifstream ifs;
….. if (!ifs.eof())//尚未到达文件尾 ….. 或者可以检查流对象是否为零,为零表示文件结束 示例: ifstream ifs; ….. if (!ifs)//尚未到达文件尾 …..
输出流:有一种流表示数据从内存送到某个载体或 设备中,叫做输出流。
7.2
C++ 的流及流ream library):用派生方法建立起来 的一个输入输出类库,它有两个平行的基类: streambuf类和ios类,它们在iostream.h中定义,是两 个非常低级的类,所有流类均以两者之一作为其基类。
7.4用户自定义类型的输入/输出
一、重载输出运算符“<<” 输出运算符 << 也称插入运算符,有两个操作数,左操作数为 ostream类类型的对象,右操作数可以是一个预定义类型的变量, 也可以是重载了该运算符(<<)的类的对象。 重载运算符 << 的定义格式如下: ostream& operator<<(ostream& { out<<obj.item1; out<<obj.item2; out<<obj.item3; //… return out; } 一般采用友元函数形式重载。 out, user_type& obj)
1
4、随机存取文件 随机存取文件可以根据需要访问文件中的任一个元素。 (1)、文件指针函数 a) seekg(pos)——在输入流中从头开始移动pos个字节文件读指针 seekp(pos)——在输出流中从头开始移动pos个字节文件写指针 b) seekg(pos,origin) 从指定位置开始移动文件指针 seekp(pos,origin) 其中,origin取值:ios::beg、ios::cur、ios::end (2)、随机读写操作 见书中例7.14(P271)--seekp( )的使用 --seekg( )的使用
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6
输 插入运算符(<<) 插入运算符( ) 出 流
插入(<<)运算符是所有标准C++数据类型预先 设计的。 用于传送字节到一个输出流对象。
7
控制输出格式
输 出 流
控制输出宽度

为了调整输出,可以通过在流中放入setw操纵符或调用width成 员函数为每个项指定输出宽度。
例11-1 使用width控制输出宽度
8
输 例:使用 填充 使用*填充 出 流
#include <iostream> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) 输出结果: 输出结果: { cout.width(10); ******1.23 ******1.23 cout.fill('*'); cout<<values[i]<<'\n'; *****35.36 } *****653.7 } ***4358.24
12
输 进制 出 流
dec、oct和hex操纵符设置输入和输出的缺省进 制。
13
输 输出文件流成员函数 出 流
输出流成员函数有三种类型:
– – –
与操纵符等价的成员函数。 执行非格式化写操作的成员函数。 其它修改流状态且不同于操纵符或插入运算符的成 员函数。
14
输 输出文件流成员函数 出
open函数
ifstream myFile;//建立一个文件流对象 myFile.open("filename",iosmode); myFile.open("filename",iosmode); //打开文件 打开文件"filename" //打开文件"filename"
19
输 提取运算符(>>) 提取运算符( ) 入 流
21
输 输入流成员函数 入 流
seekg函数用来设置输入文件流中读取数据位 置的指针。 tellg函数返回当前文件读指针的位置。 close函数关闭与一个输入文件流关联的磁盘 文件。
22
输 例11-9 设置位置指针 入 流
#include <iostream> #include <fstream> using namespace std; void main() { char ch; ifstream tfile("payroll",ios::binary|ios::nocreate); if(tfile) { tfile.seekg(8); while(tfile.good()) { tfile.get(ch); if (!ch) break; cout<<ch; } } else { cout<<"ERROR: Cannot open file 'payroll'."<<endl; } tfile.close(); }
#include <fstream> using namespace std; struct Date { int mo,da,yr; }; void main() { Date dt = {6,10,92}; ofstream tfile("date.dat",ios::binary); tfile.write((char *) &dt,sizeof dt); tfile.close(); }
9
输 例11-2使用 使用setw指定宽度 使用 指定宽度 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) 输出结果: 输出结果: cout<<setw(6)<<names[i] Zoot 1.23 <<setw(10)<<values[i] Jimmy 35.36 <<endl; Al 653.7 } Stan 4358.24
C++语言程序设计
流类库与输入/ 第十一章 流类库与输入/输出
本章主要内容
I/O流的概念 输出流 输入流 输入/输出流
2
I/O流的概念 流的概念
当程序与外界环境进行信息交换时,存在着两个对象,一 个是程序中的对象,另一个是文件对象。 流是一种抽象,它负责在数据的生产者和数据的消费者之 间建立联系,并管理数据的流动。 程序建立一个流对象,并指定这个流对象与某个文件对象 建立连接,程序操作流对象,流对象通过文件系统对所连 接的文件对象产生作用。 读操作在流数据抽象中被称为(从流中)提取,写操作被 称为(向流中)插入。
3
输出流
最重要的三个输出流是
– – –
ostream ofstream ostringstream
4
输 输出流对象 出 流
预先定义的输出流对象:
– –

cout 标准输出 cerr 标准错误输出,没有缓冲,发送给它的内容立 即被输出。 clog 类似于cerr,但是有缓冲,缓冲区满时被输出。
5
输 输出流对象 出 流
#include <iostream> using namesoace std; void main() { double values[] = {1.23,35.36,653.7,4358.24}; 输出结果: 输出结果: for(int i=0;i<4;i++) { cout.width(10); 1.23 cout << values[i] <<'\n'; 35.36 } 653.7 } 4358.24
11
输 例11-4控制输出精度 控制输出精度 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; cout<<setiosflags(ios::scientific); for(int i=0;i<4;i++) 输出结果: 输出结果: cout<<setiosflags(ios::left) Zoot 1 <<setw(6)<<names[i] Jimmy 4e+001 <<resetiosflags(ios::left) <<setw(10)<<setprecision(1) Al 7e+002 << values[i]<<endl; Stan 4e+003 }
提取运算符(>>)对于所有标准C++数据类型都 是预先设计好的。 是从一个输入流对象获取字节最容易的方法。 ios类中的很多操纵符都可以应用于输入流。 但是只有少数几个对输入流对象具有实际影响, 其中最重要的是进制操纵符dec、oct和hex。
20
输 输入流成员函数 入 流
open函数把该流与一个特定磁盘文件相关联。 get函数的功能与提取运算符(>>)很相像,主要的不同点是get 函数在读入数据时包括空白字符。(第6章介绍过) 6 getline的功能是从输入流中读取多个字符,并且允许指定输入终 止字符,读取完成后,从读取的内容中删除终止字符。(第6章 介绍过) read成员函数从一个文件读字节到一个指定的内存区域,由长度 参数确定要读的字节数。 如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到 文件结束标记字符时结束读取。
23
输 例11-8 文件读二进制记录 入 流
#include <iostream> #include <fstream> #include <cstring> using namespace std; void main() { struct { double salary; char name[23]; } employee; ifstream is("payroll",ios::binary|ios::nocreate); if (is) { is.read((char *) &employee,sizeof(employee)); cout<<<<' '<<employee.salary<<endl; } else { cout<<"ERROR: Cannot open file 'payroll'."<<endl;} is.close(); }
10
输 例11-3设置对齐方式 设置对齐方式 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) cout<<setiosflags(ios::left) 输出结果: 输出结果: <<setw(6)<<names[i] Zoot 1.23 <<resetiosflags(ios::left) Jimmy 35.36 <<setw(10)<<values[i] Al 653.7 <<endl; Stan 4358.24 }
相关文档
最新文档