华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如2016第11章输入/输出流I/O(输入/输出)流类库提供对象之间的数据交互服务流类库预定义了一批流对象,连接常用的外部设备程序员可以定义所需的I/O流对象,使用流库提供的工作方式实现数据传输华南理工大学计算机学院周霭如2016第11章输入/输出流11.1流类和流对象11.2标准流和流对象11.3格式控制11.4串流11.5文件处理小结华南理工大学计算机学院周霭如2016程序中,对数据的输入/输出是以字节流实现的应用程序对字节序列作出各种数据解释I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。流类对象可以建立和删除,可以从流中获取数据和向流添加数据11.1流类和流对象华南理工大学计算机学院周霭如201611.1.1流类库流库(streamlibrary)是用继承方法建立的输入输出类库流库具有两个平行的基类:streambuf和ios类,所有流类均以两者之一作为基类streambuf类提供对缓冲区的低级操作设置缓冲区对缓冲区指针操作向缓冲区存/取字符ios类及其派生类提供用户使用流类的接口,支持对streambuf的缓冲区输入/输出的格式化或非格式化转换华南理工大学计算机学院周霭如2016streambuf1.streambuf对缓冲区的低级操作11.1.1流类库filebufstrstreambufstdiobuf华南理工大学计算机学院周霭如2016streambuf1.streambuf对缓冲区的低级操作11.1.1流类库filebufstrstreambufstdiobuf文件缓冲区管理华南理工大学计算机学院周霭如2016streambuf1.streambuf对缓冲区的低级操作11.1.1流类库filebufstrstreambufstdiobuf字符串缓冲区管理华南理工大学计算机学院周霭如2016streambuf1.streambuf对缓冲区的低级操作11.1.1流类库filebufstrstreambufstdiobuf标准I/O缓冲区管理华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流输入文件流输入串流输出串流输出文件流华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流输入文件流输入串流输出串流输出文件流输入/输出流华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流输入文件流输入串流输出串流输出文件流输入/输出流输入/输出文件流输入/输出串流标准输入/输出流华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流输入文件流输入串流输出串流输出文件流输入/输出流输入/输出文件流输入/输出串流标准输入/输出流重载运算符“=”重载运算符“=”华南理工大学计算机学院周霭如201611.1.1流类库2.ios提供用户接口iosistreamostreamiostreamfstreamstrstreamstdiostreamistream_withassignifstreamistrstreamostream_withassignofstreamostrstream输入流输出流输入文件流输入串流输出串流输出文件流输入/输出流输入/输出文件流输入/输出串流标准输入/输出流重载运算符“=”重载运算符“=”华南理工大学计算机学院周霭如201611.1.2头文件iostream.h包含操作所有输入/输出流所需的基本信息含有cin、cout、cerr、clog对象,提供无格式和格式化的I/Oiomanip.h包含格式化I/O操纵算子,用于指定数据输入输出的格式fstream.h处理文件信息,包括建立文件,读/写文件的各种操作接口每种C++版本还包含其他一些与I/O相关的库,提供特定系统的某些功能华南理工大学计算机学院周霭如2016华南理工大学计算机学院周霭如2016标准流是C++预定义的对象,提供内存与外部设备进行数据交互功能流的操作是流类的公有成员函数11.2标准流和流操作华南理工大学计算机学院周霭如201611.2.1标准流____________________内存____________________istreamcinostreamcout标准输入流标准输出流标准流为用户常用的外部设备提供与内存之间的通信通道,对数据进行解释和传输,提供必要数据缓冲华南理工大学计算机学院周霭如201611.2.1标准流(1)cinistream类的对象,通常连向键盘,可以重定向(2)coutostream类的对象,通常连向显示器,可以重定向(3)cerrostream类的对象,连向显示器。不能重定向(4)clogostream类的对象,连向打印机。不能重定向重定向操作见附录A.2.4华南理工大学计算机学院周霭如2016函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream类的公有成员函数11.2.2输入流操作华南理工大学计算机学院周霭如2016函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream&read(char*pch,intnCount);istream&read(unsignedchar*puch,intnCount);istream&read(signedchar*psch,intnCount);istream类的公有成员函数11.2.2输入流操作华南理工大学计算机学院周霭如201611.2.2输入流操作函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符intget();istream&get(char*pch,intnCount,chardelim='\n');istream&get(unsignedchar*puch,intnCount,chardelim='\n');istream&get(signedchar*psch,intnCount,chardelim='\n');istream&get(char&rch);istream&get(unsignedchar&ruch);istream&get(signedchar&rsch);istream&get(streambuf&rsb,chardelim='\n');istream类的公有成员函数华南理工大学计算机学院周霭如201611.2.2输入流操作函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream&getline(char*pch,intnCount,chardelim='\n');istream&getline(unsignedchar*puch,intnCount,chardelim='\n');istream&getline(signedchar*psch,intnCount,chardelim='\n');istream类的公有成员函数华南理工大学计算机学院周霭如201611.2.2输入流操作函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符istream&ignore(intnCount=1,intdelim=EOF);istream类的公有成员函数华南理工大学计算机学院周霭如201611.2.2输入流操作函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符intpeek();istream类的公有成员函数华南理工大学计算机学院周霭如201611.2.2输入流操作函数功能read无格式输入指定字节数get从流中提取字符,包括空格getline从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符intgcount()const;istream类的公有成员函数华南理工大学计算机学院周霭如201611.