C++语言程序设计 第十一章 流类库与输入/输出.

Slides:



Advertisements
Similar presentations
計算機程式語言實習課.
Advertisements

第 2 章 初探 C++.
第11章 输入输出流类.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
流类库与输入/输出 输入/输出标准流类 文件流类 串流类 输入/输出成员函数 用户自定义类型的输入/输出.
File Access 井民全製作.
第八章 类和对象.
C++程序设计 王希 图书馆三楼办公室.
C++的檔案處理 綠園.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第9章 C++的文件操作 “文件”,一般是指内存以外的存储介质上一批数据的集合。C++在语言层次上提供了文件操作的一系列函数用于完成文件的操作,打开、关闭文件,读取、写入文件数据等操作。 1。字符文件与二进制文件 字符文件:又称ASCII文件或文本TEXT文件,它是以一个字节存放一个ASCII码,代表一个字符。例如,32767需要使用5个字节表示,即:
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++程序设计 string(字符串类) vector(容器类).
第13章 输入输出流 王雪晶.
C++语言程序设计 第二章 C++简单程序设计.
第九章 C++的I/O流库 9.1 流 9.2 磁盘文件 9.3 程序举例.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第三节 堆及其应用.
第 14 章 輸出與輸入.
第十三讲 文件流与 输出输入重载.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
第14章 输入输出与文件 输入输出是指程序与外部设备交换信息 C++把输入输出看成是一个数据流 输入流:外围设备流向内存的数据
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
Name1..hour //加班時數 name2..hour //請假時數
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
Chapter 2 & Chapter 3.
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
手机移动设备嵌入式C++ 第七章 C++的I/O流库.
程式結構&語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
第3章C++面向对象程序设计 3.1 类和对象 作业1 3.2 继承和派生类 作业2 3.3 多态和虚函数 3.4 运算符重载 作业3
物件導向程式設計 CH2.
C++的檔案處理 綠園.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第1章 C++面向对象程序设计要点 1.1 函数和函数参数 1.2 输入输出   1.3 类 1.4 抽象类型和模板.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第2章 文件操作 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 第十一章 流类库与输入/输出

本章主要内容 I/O流的概念 输出流 输入流

I/O流的概念 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。 流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。 程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。 读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。

输出流 最重要的三个输出流是 ostream ofstream ostringstream

输出流对象 输出流 预先定义的输出流对象: cout 标准输出 cerr 标准错误输出,没有缓冲,发送给它的内容立即被输出。 clog 类似于cerr,但是有缓冲,缓冲区满时被输出。

输出流对象 输出流 ofstream类支持磁盘文件输出 如果在构造函数中指定一个文件名,当构造这个文件时该文件是自动打开的 ofstream myFile("filename",iosmode); 可以在调用默认构造函数之后使用open成员函数打开文件 ofstream myFile; //声明一个静态输出文件流对象 myFile.open("filename",iosmode); //打开文件,使流对象与文件建立联系 ofstream* pmyFile = new ofstream; //建立一个动态的输出文件流对象 pmyFile->open("filename",iosmode); //打开文件,使流对象与文件建立联系

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

控制输出格式 输出流 控制输出宽度 例11-1 使用width控制输出宽度 为了调整输出,可以通过在流中放入setw操纵符或调用width成员函数为每个项指定输出宽度。 例11-1 使用width控制输出宽度 #include <iostream> using namesoace std; int main() { double values[] = {1.23,35.36,653.7,4358.24}; for(int i=0;i<4;i++) { cout.width(10); cout << values[i] <<'\n'; } 输出结果: 1.23 35.36 653.7 4358.24

例:使用*填充 输出流 #include <iostream> using namespace std; int main() { double values[]={1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) { cout.width(10); cout.fill('*'); cout<<values[i]<<'\n'; } 输出结果: ******1.23 *****35.36 *****653.7 ***4358.24

例11-2使用setw指定宽度 输出流 #include <iostream> #include <iomanip> using namespace std; int 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] <<setw(10)<<values[i] <<endl; } 输出结果: Zoot 1.23 Jimmy 35.36 Al 653.7 Stan 4358.24

例11-3设置对齐方式 输出流 #include <iostream> #include <iomanip> using namespace std; int 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] <<resetiosflags(ios::left) <<setw(10)<<values[i] <<endl; } 输出流 输出结果: Zoot 1.23 Jimmy 35.36 Al 653.7 Stan 4358.24

例11-4控制输出精度 输出流 #include <iostream> #include <iomanip> using namespace std; int 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) <<setw(6)<<names[i] <<resetiosflags(ios::left) <<setw(10)<<setprecision(1) << values[i]<<endl; } 输出流 输出结果: Zoot 1 Jimmy 4e+001 Al 7e+002 Stan 4e+003

进制 输出流 dec、oct和hex操纵符设置输入和输出的缺省进制。

输出文件流成员函数 输出流 输出流成员函数有三种类型: 与操纵符等价的成员函数。 执行非格式化写操作的成员函数。 其它修改流状态且不同于操纵符或插入运算符的成员函数。

输出文件流成员函数 输出流 open函数 put函数 write函数 seekp和tellp函数 close函数 错误处理函数 把流与一个特定的磁盘文件关联起来。 需要指定打开模式。 put函数 把一个字符写到输出流中。 write函数 把内存中的一块内容写到一个输出文件流中 seekp和tellp函数 操作文件流的内部指针 close函数 关闭与一个输出文件流关联的磁盘文件 错误处理函数 在写到一个流时进行错误处理

例11-5向文件输出 输出流 #include <fstream> using namespace std; struct Date { int mo,da,yr; }; int main() { Date dt = {6,10,92}; ofstream tfile("date.dat",ios::binary); tfile.write((char *) &dt,sizeof dt); tfile.close(); } 输出流

二进制输出文件 输出流 以通常方式构造一个流,然后使用setmode成员函数,在文件打开后改变模式。 使用ofstream构造函数中的模式参量指定二进制输出模式 使用二进制操作符代替setmode成员函数:ofs << binary;

输入流 重要的输入流类: istream类最适合用于顺序文本模式输入。 cin是其派生类istream_withassign的对象。 ifstream类支持磁盘文件输入。 istringstream

输入流对象 输入流 如果在构造函数中指定一个文件名,在构造该对象时该文件便自动打开。 在调用缺省构造函数之后使用open函数来打开文件。 ifstream myFile("filename",iosmode); 在调用缺省构造函数之后使用open函数来打开文件。 ifstream myFile;//建立一个文件流对象 myFile.open("filename",iosmode); //打开文件"filename"

提取运算符(>>) 输入流 提取运算符(>>)对于所有标准C++数据类型都是预先设计好的。 是从一个输入流对象获取字节最容易的方法。 ios类中的很多操纵符都可以应用于输入流。但是只有少数几个对输入流对象具有实际影响,其中最重要的是进制操纵符dec、oct和hex。

输入流成员函数 输入流 open函数把该流与一个特定磁盘文件相关联。 get函数的功能与提取运算符(>>)很相像,主要的不同点是get函数在读入数据时包括空白字符。(第6章介绍过) getline的功能是从输入流中读取多个字符,并且允许指定输入终止字符,读取完成后,从读取的内容中删除终止字符。(第6章介绍过) read成员函数从一个文件读字节到一个指定的内存区域,由长度参数确定要读的字节数。 如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束读取。

输入流成员函数 输入流 seekg函数用来设置输入文件流中读取数据位置的指针。 tellg函数返回当前文件读指针的位置。 close函数关闭与一个输入文件流关联的磁盘文件。

例11-9 设置位置指针 输入流 #include <iostream> #include <fstream> using namespace std; int 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();

例11-8 文件读二进制记录 输入流 #include <iostream> #include <fstream> #include <cstring> using namespace std; int 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.name<<' '<<employee.salary<<endl; } else { cout<<"ERROR: Cannot open file 'payroll'."<<endl;} is.close();

输入流 例11-10 读文件并显示其中空格的位置 #include <iostream> #include <fstream> using namespace std; int main() { char ch; ifstream tfile("payroll",ios::binary|ios::nocreate); if(tfile) {while(tfile.good()) {streampos here = tfile.tellg(); tfile.get(ch); if(ch==' ') cout<<"\nPosition "<< here<<" is a space";} } else{ cout<<"ERROR: Cannot open file 'payroll'."<<endl;} tfile.close(); 输入流