第九章 C++的I/O流库 9.1 流 9.2 磁盘文件 9.3 程序举例.

Slides:



Advertisements
Similar presentations
电子成绩单项目实现.
Advertisements

“八皇后”问题 崔萌萌 吕金华.
第5章 指 针 教学目标: 掌握指针定义、初始化方法和基本运算; 掌握利用指针访问一维数组、二维数组的方法;
第11章 输入输出流类.
VC++系统开发 第二章 C++语言基础 河北经贸大学信息技术学院.
流类库与输入/输出 输入/输出标准流类 文件流类 串流类 输入/输出成员函数 用户自定义类型的输入/输出.
C程序设计 第10章 文 件 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
微博: weibo.com/zhnitj QQ:
C++的檔案處理 綠園.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
第一章 程序设计入门.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
计算概论 第二十一讲 文件操作 北京大学信息学院.
C++程序设计 第二讲 清华大学软件学院.
第8章 C++输入输出类层次 ffh.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
新世纪计算机专业系列教材 数据结构 C++实现 第一章 缪淮扣 顾训穰 沈 俊 编著 科 学 出 版 社.
第十一章 文件 文件概述 文件操作 文件操作实例 本章小结 作业: 练习:
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
C语言程序设计 李祥.
第9章 C++的文件操作 “文件”,一般是指内存以外的存储介质上一批数据的集合。C++在语言层次上提供了文件操作的一系列函数用于完成文件的操作,打开、关闭文件,读取、写入文件数据等操作。 1。字符文件与二进制文件 字符文件:又称ASCII文件或文本TEXT文件,它是以一个字节存放一个ASCII码,代表一个字符。例如,32767需要使用5个字节表示,即:
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
第一章 C++编程简介 丘志杰 电子科技大学 计算机学院 软件学院.
第五章 指针 5.1 指针的概念和定义 5.2 指针运算 5.3 指针和数组 5.4 字符串指针 5.5 指针数组 5.6 指向指针的指针
第二章 C++对C 在非面向对象方面的改进 更简洁,更安全.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
第13章 输入输出流 王雪晶.
THE C PROGRAMMING LANGUAGE
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
C++语言程序设计 第十一章 流类库与输入/输出.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Struct結構 迴圈
第 14 章 輸出與輸入.
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
第十三讲 文件流与 输出输入重载.
第14章 输入输出与文件 输入输出是指程序与外部设备交换信息 C++把输入输出看成是一个数据流 输入流:外围设备流向内存的数据
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
程式結構&語法.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
第3章C++面向对象程序设计 3.1 类和对象 作业1 3.2 继承和派生类 作业2 3.3 多态和虚函数 3.4 运算符重载 作业3
物件導向程式設計 CH2.
C++的檔案處理 綠園.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院.
第二章 类型、对象、运算符和表达式.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第13章 文 件.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
第2章 文件操作 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第18讲 从C到C++ 计算机与通信工程学院.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
第9章 C++程序设计初步 9.1 C++的特点 9.2 最简单的C++程序 9.3 C++的输入输出 9.4 函数的重载
C++程序语言设计 Chapter 14: Templates.
Introduction to the C Programming Language
安排座位.
隨機函數.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第九章 C++的I/O流库 9.1 流 9.2 磁盘文件 9.3 程序举例

9.1流 输出 内存 设备 数据 输入

标准输出流 cout cout是系统定义过的ostream类的一个对象,该类提供的多种输出功能都适用于cout,包括: 使用流插入操作符(<<)输出各种数据 通过成员函数put输出字符 通过成员函数write输出字符串 1.成员函数put的使用 格式: 作用为在屏幕上输出一个字符,返回值为ostream类对象的引用,故函数可以连续调用。 字符变量 字符常量 cout.put(char c) cout.put(const char c) 或

例9.1 #include "iostream.h" void main() {char ch='A'; cout.put(ch)<<endl; cout.put('O').put('k')<<endl; } 连续调用 2.成员函数write的使用 格式: 作用是将一个字符串的部分或全部内容在屏幕上输出。 该函数的返回值为ostream类对象的引用,故函数可以连续调用。 字符数组或字符指针 cout.write(const char *str,int n) 输出的字符个数

例9.2 #include "iostream.h" #include <string.h> void main() {char *ch="ABCDEFGHIJKLMN"; cout.write(ch,10).put('\n'); //输出该字符串的前10个字符 cout.write(ch,strlen(ch))<<endl;//输出全部字符串 }

标准输入流 cin cin是系统定义过的istream类的一个对象,该类提供的多种输入功能都适用于cin,包括: 1.成员函数get的使用 使用流提取操作符(>>)输入数据 通过成员函数get输入字符或字符串 通过成员函数read输入字符串 1.成员函数get的使用 格式: 作用为从键盘上输入一个字符给内存变量ch,返回值为ostream类对象的引用,故函数可以连续调用。 字符变量 cin.get(char ch) ch=cin.get( ) 或 注意:空白符作为有效字符被读入,不同于使用提取符(>>)

cout<<"input a serial of characters:"<<endl; 例9.3 统计字符串中包含的字符个数 #include "iostream.h" void main() {int count=0; char ch; cout<<"input a serial of characters:"<<endl; while((ch=cin.get())!=EOF) // 按ctrl+z结束输入 {cout<<ch; count++; } cout<<count<<endl; 不断输入字符,直到输入结束符 1.观察运行结果 2. 将循环条件改为 cin>>ch 程序结果又如何? 3.对比两种输入方法的区别

使用get成员函数读入一行字符串,也可以用成员函数getline实现,形式如下: cin.get(char *buf,int size,char ch) cin.getline(char *buf,int size,char ch) 存放字符串的字符数组或字符指针 限定最大字符个数不能超过size-1 指定的结束符,该字符不包含在字符串中,默认结束符为‘\n’

cout<<"input a string:"<<endl; while((cin.getline(s,50))) 例9.4 找最长串 #include "iostream.h" #include "string.h" void main() {int line,max=0; char s[50],t[50]; cout<<"input a string:"<<endl; while((cin.getline(s,50))) { line=cin.gcount(); //line中存放的是刚刚读入的那行字符串的长度 if(line>max) {max=line; strcpy(t,s); } cout<<"the string of longest line is:"<<endl; cout<<t<<endl; cout<<"it has "<<max<<"characters"<<endl; 输入一行字符串,最大长度不能超过49 若改为cin.getline(s,50, ' ') 结果如何?

cin. read(char *buf, int size) 格式: 例9.5 cin. read(char *buf, int size) 读取到字符数组中的字符个数(不同于getline函数) #include "iostream.h" #include "string.h" void main() {char ch[100]; cin.read(ch,10); //读取输入流中的前10个字符到数组ch中 cout<<"\n The string entered is:\n"; cout.write(ch,cin.gcount())<<endl; } 对比cin.getline(ch,10) 的结果

9.2 磁盘文件 ifstream类操作文件输入 ofstream类操作文件输出 fstream类操作文件输入 输出 1. 打开文件 创建流类对象的同时打开文件 先创建流类对象、再打开文件 创建的输出流对象 ofstream outfile("abc.dat"); fstream outfile("abc.dat", ios::out); ofstream outfile; outfile.open("abc.dat"); 等价 以输出形式打开文件 创建的输入输出流对象

对已正确打开的某文本文件,可以通过对与其相关联的流类对象的如下操作进行读写 2.关闭文件 关闭文件的成员函数 outfile.close(); 已定义的与某磁盘文件相关联的流类对象 3.文本文件的读写 对已正确打开的某文本文件,可以通过对与其相关联的流类对象的如下操作进行读写 使用提取、插入操作 使用成员函数get(含getline)和put 例9.6

#include "stdlib.h" #include "iostream.h" #include "fstream.h" void main() {ofstream outfile; outfile.open("abc.txt"); //以写的方式打开文件abc.txt if(!outfile) {cout<<"abc.txt can't open"<<endl; abort(); //打开失败,结束程序 } char ch='a'; while(ch<='z') {outfile<<ch; ch++; outfile.close(); fstream infile("abc.txt",ios::in); //以读的方式打开文件abc.txt while(infile>>ch) cout<<ch; cout<<endl; 检查文件是否正常打开 通过插入操作将内存变量的内容写到文件中 通过提取操作从文件中读数据到内存变量

例9.7 #include"iostream.h" #include "fstream.h" #include "stdlib.h" void main() {char s[100]; ofstream outf; outf.open("f1.dat"); if(!outf) {cout<<"can't open f1.dat"<<endl; abort(); } outf<<"He is a boy.\n"; outf<<"She is a girl.\n"; outf<<"I'm a teacher.\n"; outf.close(); ifstream inf("f1.dat"); while(!inf.eof()) {inf.getline(s,sizeof(s)); cout<<s<<endl; 例9.7 通过插入操作将若干字符串写到文件中 通过getline函数从文件中读一行字符串到数组

4.二进制文件的读写 创建流对象或打开文件时需显式声明文件类型为二进制 ios::binary 最常用成员函数read和write实现读写 可使用提取、插入操作完成读写 如: ofstream outfile; outfile.open("file.dat",ios::binary); 或: ofstream outfile("file.dat",ios::binary); 皆表示以二进制模式打开文件“file.dat”,并将其与输出流对象outfile相关联。

outfile<<stu[i].num<<stu[i].name<<stu[i].score; 假设有定义: struct student {int num; char name[20]; double score; }stu[5]; ofstream outfile("file.dat",ios::binary); 则可通过如下程序段实现文件的写操作: 将一个记录中的数据都变为字符进行处理 for(int i=0;i<n;i++) { cin>>stu[i].num>>stu[i].name>>stu[i].score; outfile.write((char *)&stu[i],sizeof(struct student)); } 也可通过插入符实现 outfile<<stu[i].num<<stu[i].name<<stu[i].score;

通过成员函数定位读写文件指针,实现随机访问 5.随机访问文件 通过成员函数定位读写文件指针,实现随机访问 操作读指针的成员函数: 定位读文件指针位置 istream&istream::seekg(流中位置); istream&istream::seekg(偏移量,参照位置); streampos istream::tellg(); ios::beg 相对于流开始处 ios::cur 相对于当前位置 ios::end 相对于流结尾处 返回读文件指针位置 如,假设inf是一个istream类的流,则: inf.seekg(50,ios::beg);表示使读指针从流开始位置后移50字节 inf.seekg(-50,ios::end); 表示使读指针从流结尾处前移50字节

ostream&ostream::seekp(流中位置); ostream&ostream::seekp(偏移量,参照位置); 操作写指针的成员函数: 定位写文件指针位置 ostream&ostream::seekp(流中位置); ostream&ostream::seekp(偏移量,参照位置); streampos ostream::tellp(); 含义同读指针 返回写文件指针位置 利用seekg或seekp定位文件指针后,再调用读写成员函数,便可以实现文件的随机读写,例子见教材p323

9.3 程序举例 例9.8 设计程序实现将给定的文本文件在屏幕上分屏显示的功能 #include "iostream.h" #include "fstream.h" #include "stdio.h" #include "stdlib.h" void main() {int r; char c; char fn[15],buf[100]; fstream file1; cout<<"input the file name:"; cin>>fn;//输入指定的文件名 file1.open(fn,ios::in); if(!file1) {cout<<"can't open the file.\n"; abort(); } while(!file1.eof()) {r=0; //计数器代表已显示在屏幕上文本的行数 while(!file1.eof()&&r<23)//一屏显示24行 {file1.getline(buf,100); //逐行读文件 cout<<buf<<endl; r++; } cout<<"press 'enter' key..."; c=getchar(); //键入回车键后显示下一屏 file1.close();

例9. 9 将sin(x)在i(2π/360)(i=0,1,…359)上的值保存在文件dsin 例9.9 将sin(x)在i(2π/360)(i=0,1,…359)上的值保存在文件dsin.dat中,并从该文件中读取数据,以这些数据为基础,计算sin(x)在[0,2π]上的积分。 #include "fstream.h" #include "math.h" #define SIZE 361 #define PI 3.14159 #include "stdlib.h" void main( ) { double data[SIZE],s=0; for (int i=0; i<SIZE; i++) data[i]=sin(2*i*PI/360); fstream file1; file1.open("dsin.dat",ios::out); if(!file1) {cout<<"can't open the file.\n"; abort(); } file1.write ((char*)data, sizeof(data)); file1.close(); file1.open("dsin.dat",ios::in); if(!file1) {cout<<"can't open the file.\n"; abort(); } file1.read((char*)data, sizeof(data)); for (i=0; i<SIZE; i++) s=s+data[i]; s=s*(2*PI/360); cout<<s<<endl; 将sin(x)在0~2π上的值写入文件dsin.dat 梯形法求积分