程序设计原理输入输出流与文件操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有格式读写,以某种数据类型为单位读写
例如:读一个整数,写一个浮点数等;
无格式读写,以字节为单位读写,不区分其中 的内容
例如:读20个字节,写50个字节等;
程序设计原理输入输出流和文件操作
缓冲区刷新
向输出流中写数据时,通常是先向缓冲区中写, 当缓冲区写满时,才真正向输出流写;也可以 通过函数在程序中主动将缓冲区内容写入输出 流。
程序设计原理输入输出流和文件操作
输出流
用成员函数put输出字符 cout .put(‘A’);
put的连续使用 cout .put(‘A’).put(‘a’);
程序设计原理输入输出流和文件操作
输入流
读取运算的返回值 重载>>运算符的定义:
istream &operator >>(istream &input, A & a){ ……. return input;
作算子,调用方式不同: cin >> setw(5); 或者 cin.width(5); cout << setw(5); 或者 cout.width(5);
程序设计原理输入输出流和文件操作
设置域宽的流操纵算子
设置域宽(setw,width) 例:int w = 4;
char string[10]; cin.width(5); while(cin >> string){
程序设计原理输入输出流和文件操作
流操纵算子
整数流的基数:流操纵算子dec,oct,hex,setbase 浮点数的精度(precision,setprecision) 设置域宽(setw,width) 用户自定义的流操纵算子 使用流操纵算子需要 #include <iomanip>
程序设计原理输入输出流和文件操作
程序设计原理
输入输出流和文件操作
程序设计原理输入输出流和文件操作
输入输出流
流的概念模型 C++中与流操作相关的类及其继承关系 输入输出流对象: cin, cout, cerr, clog 输出流 输入流 无格式输入输出 流操纵算子 流格式状态
程序设计原理输入输出流和文件操作
流的概念模型
<< y << endl << n << endl << m; }
浮点数输出最多6位有 效数字 程序设计原理输入输出流和文件操作
输出: 1.23457e+006 12.3457
12
控制浮点数精度的流操纵算子
#include <iostream>
#include <iomanip>
using namespace std;
设置域宽(setw,width)
需要注意的是在每次读入和输出之前都要设置宽度。例 如:
char str[10];
输入:1234567890
cin.width(5);
输出:1234
cin >> string;
5678
cout << string << endl;
cin.width(5);
cin >> string;
程序设计原理输入输出流和文件操作
输入流
其它函数 cin.peek(); 返回下一个字符,但不从流中去掉. putback(char ch); 将字符ch放回输入流
ignore( int nCount = 1, int delim = EOF );
从流中删掉最多nCount个字符,遇到EOF时结 束。
流 - 可以看作一个无限长的二进制数字序列
~ 1 01 0 11 10 ~
通过读写指针进行流的读和写(以字节为单位)
~ 1 01 0 11 10 ~
将y的值写入流
将流上的数据读进变量x
x 10101110
y11100010
程序设计原理输入输出流和文件操作
流的概念模型
输出流 可以看作一端无限,另一端通过写指针
程序设计原理输入输出流和文件操作
数据的层次
位 bit 字节 byte 域/记录
例如:学生记录 int ID; char name[10]; int age; int rank[10]; 我们将所有记录顺序地写入一个文件,称为顺序文件。
程序设计原理输入输出流和文件操作
文件和流
可以将顺序文件看作一个有限字符构成的顺 序字符流,然后象对cin, cout 一样的读写。 回顾一下输入输出流类的结构层次:
cout.width(w++); cout << string << endl; cin.width(5); }
输入:1234567890 输出:1234
5678 90
程序设计原理输入输出流和文件操作
设置域宽的流操纵算子
设置域宽(setw,width)
需要注意的是在每次读入和输出之前都要设置宽度。例 如:
char str[10];
输入:1234567890
cin.width(5);
输出:1234
cin >> string;
567890
cout << string << endl;
cin >> string;
cout << string << endl;
程序设计原理输入输出流和文件操作
设置域宽的流操纵算子
ቤተ መጻሕፍቲ ባይዱ
流操纵算子
整数流的基数:流操纵算子dec,oct,hex int n = 10; cout << n << endl; cout << hex << n << “\n” << dec << n << “\n” << oct << n << endl;
输出结果:
10 a 10 12
程序设计原理输入输出流和文件操作
不停地向后写入新内容的单向流,
~ 110 0 0 1 1 0 1 0
写指针
程序设计原理输入输出流和文件操作
流的概念模型
输入流 可以看作一端无限,另一端通过读指针不
停地从流中读取新内容的单向流,读出的内容 从流中删去。
~ 110 0 0 1 1 0 1 0
读指针
程序设计原理输入输出流和文件操作
有格式读写和无格式读写 字符方式/二进制方式读写
ios
istream ostream
ifstream
iostream
ofstream
fstream
程序设计原理输入输出流和文件操作
建立顺序文件
#include <fstream.h> // 包含头文件 ofstream outFile(“clients.dat”, ios::out|ios::binary); //打
程序设计原理输入输出流和文件操作
控制浮点数精度的流操纵算子
#include <iostream> #include <iomanip> using namespace std; int main() {
double x = 1234567.89,y = 12.34567; int n = 1234567; int m = 12; cout << setprecision(6) << x << endl
}
返回的是输入流的引用(引用本身是地址),在读取不成 功时, 该地址被置成 0. 所以可以用如下方法判输入结 束:
int x; while(cin>>x){ … }
程序设计原理输入输出流和文件操作
输入流
成员函数 cin.get() 读入一个字符(包括空白字符), 返回该字符; cin.get(char *buffer, int size,char delim=‘\n’ )
setprecision(6) << x << endl << resetiosflags(ios::fixed) << x ; }
输出: 1234567.890000 1.23457e+006
取消以小数点位置固 定的方式输出 程序设计原理输入输出流和文件操作
设置域宽的流操纵算子
设置域宽(setw,width) 两者功能相同,一个是成员函数,另一个是流操
int main()
{
double x = 1234567.89,y = 12.34567;
int n = 1234567;
int m = 12; cout << setiosflags(ios::fixed) <<
setprecision(6) << x << endl << y << endl << n << endl << m;
程序设计原理输入输出流和文件操作
无格式输入输出
用read, write 进行指定字节数的输入输出 const int SIZE = 80; char buffer[SIZE]; cin.read(buffer, 20); cout.write(buffer, cin.gcount());
//gcount返回上次读入的字节数 cout << endl; 输入:Using the read,write and gcount member functions 输出:Using the read,write
输出: 1234567.890000 12.345670
}
以小数点位置固定的
12
方式输出 程序设计原理输入输出流和文件操作
控制浮点数精度的流操纵算子
#include <iostream> #include <iomanip> using namespace std; int main() {
double x = 1234567.89; cout << setiosflags(ios::fixed) <<
加 ios::binary 以二进制文件格式打开文件
程序设计原理输入输出流和文件操作
建立顺序文件
也可以先创建ofstream对象,再用 open函数打开 ofstream fout; fout.open("test.out",ios::out|ios::binary);
程序设计原理输入输出流和文件操作
输出流
流插入运算符 << cout << “Good morning!\n”; cout << “Good”; cout << “morning!”; cout << endl; cout << flush;
不刷新缓冲区 不刷新缓冲区 不刷新缓冲区 刷新缓冲区 刷新缓冲区
cout << string << endl;
程序设计原理输入输出流和文件操作
用户自定义流操纵算子
ostream &tab(ostream &output){ return output << '\t';
} cout << “aa” << tab << “bb” << endl;
输出:aa bb 为什么可以?
控制浮点数精度的流操纵算子
precision, setprecision
precision是成员函数,其调用方式为: cout.precision(5);
setprecision 是流操作算子,其调用方式为: cout >> setprecision(5); // 可以连续输出
它们的功能相同。 指定输出浮点数的有效位数
程序设计原理输入输出流和文件操作
用户自定义流操纵算子
因为 iostream 里对 << 进行了重载(成员函数) ostream & operator
<<( ostream & ( * p ) ( ostream & ) ) ;
程序设计原理输入输出流和文件操作
文件操作
数据的层次 文件和流 建立顺序文件 文件的读写指针 有格式读写 无格式读写
或者读size –1 个字符入buffer,或者遇到‘\n’; 在buffer最后加‘\0’,分隔符留在输入流. cin.getline(char *buffer, int size,char delim=‘\n’) 或者读size –1 个字符入buffer,或者遇到‘\n’; 在buffer最后加‘\0’, 分隔符从流去掉. cin.eof() 返回输入是否结束标志.
程序设计原理输入输出流和文件操作
C++中与流操作相关的类 及其继承关系
ios
istream
ostream
ifstream
iostream fstream
ofstream
程序设计原理输入输出流和文件操作
标准流对象
输入流对象: cin 输出流对象:cout
cerr
clog
与标准输入设备相连 与标准输出设备相连 与标准错误输出设备相连 非缓冲输出 与标准错误输出设备相连 缓冲输出
开文件
ofstream 是 fstream中定义的类 outFile 是我们定义的ofstream类的对象 “clients.dat”是将要建立的文件的文件名 ios::out 是打开并建立文件的选项
ios:out 输出到文件, 删除原有内容 ios::app 输出到文件, 保留原有内容,总是在尾部添加 ios::ate 输出到文件, 保留原有内容,可以在文件任意位置添
相关文档
最新文档