class="superseo">c++使用类型安全的IO流 *** 作,不同类型的IO流 *** 作都是重载的,没有定义过IO功能的类型不具备IO *** 作能力。
通过修改 和扩充,C++既可以为标准数据类型的IO,也能用于自定义类型的IO,这种扩展性是C++最有价值的特点之一。
所谓流stream是指数据从一个未知流向另一个位置,流是字节的序列。
输入输出是一种数据传递 *** 作,可以看作字符序列在计算机内存与外设之间的流动,c++将数据从一个对象到另一个对象的流动称为流。
2.IO流库的层次结构 ·C++ IO流库中有两个平行基类:
streambuf
ios
ios直接派生类:
·输入流类istream
·输出流类ostream
·文件流类基类fstreambase
·字符串流类基类strstreambase
3.IO流库的头文件 iostream:包含了对输入输出流进行 *** 作的基本信息,还包括cin、cout、cerr、clog
fstream:用于用户管理文件的IO *** 作
strstream:用于字符串流IO
stdiostream:用于混合使用C和C++的IO *** 作
iomanip:用于格式化IO
二、无格式输入输出 无格式IO就是按照系统预定义的格式进行输入输出
cin用于处理标准输入,即键盘输入
cout用于处理标准输出,即屏幕输出
原函数:
ostream cout(stdout);
istream cin(stdin);
重载运算符>>和<<:
cin>>E1>>E2;
cout<
三、C++的格式化输入输出
1.方式一 用流对象的成员函数格式化
流成员函数主要是通过对状态标志、输出宽度、填充字符以及输出精度的 *** 作来完成输入、输出格式化。
输入输出的格式由各种状态标志来决定,在ios类中定义为枚举量。
因为定义在ios类中,引用时必须包含ios::前缀。使用时全用符号名,不能用数值。
//设置状态标志的函数
long ios::setf(long flags);
//清除状态标志的函数
long ios::unsetf(long flags);
//用函数flags取状态标志的两种形式:
long ios::flags();
long ios::flags(long flag);
//用于设置输出宽度(只对其后的第一个输出项有效)
int ios::width(int len);//设置输出宽度,并返回原输出宽度
int ios::width();//返回当前输出宽度,默认输出宽度为0
//设置填充字符(当输出值不满输出宽度时用填充字符填充,故需要与width函数配合使用)
char ios::fill(char ch);//设置填充字符,并返回设置前的填充字符
char ios::fill();//返回当前填充字符
//设置输出精度(默认为6)
int ios::precision(int p);//重新设置输出精度
int ios::precision();//返回当前输出精度
//输出单个字符:
char ios::put();
//读入一个字符(若遇到文件结束符,函数的返回值就是读入的字符,遇到输入流文件结束符返回EOF)
char ios::get();
char ios::get(char ch);//读入的参数赋值给ch
void ios::get(char *ch,int n,char end);//在遇到end字符前读n-1个字符赋值给*ch
//读入一行字符
void ios::getline(char *ch,int n,char end);
istream其他成员函数
bool eof();//表示文件结束
char peek();//观察返回下一个字符,观察指的是流指针位置不变
void putback();//将前面用get或getline读取的字符插入到当前流指针位置
void ignore(int n,char end);//跳过n个字符,遇到end不继续跳
void ignore();//ignore(1,EOF)
以上函数的使用:
<流对象名>.<函数名>(ios::<状态标志>);
cout.setf(ios::showpos);//设置状态标志showpos
cout.unsetf(ios::showpos);//删除状态标志showpos
cout.with(10);//设置宽度十
cout.put('a').put(97);//输出aa
cin.get(ch,20,'\n');//读到换行符号之前读19个字符给ch
cin.eof();//文件结束返回true
cin.peek();//观察返回下一个字符
cin.ignore(5,'A');//跳过五个字符,遇到A不继续跳
2.方式2:用控制符格式化
//设置输入输出宽度setw(int)
//只对后边第一个输入输出有效
//实际宽度小向右对其
//反之按数据实际宽度输出
cout<
用户自定义控制符:
ostream &<控制符函数名>(ostream stream){
//自定义语句
return stream;
}
istream &<控制符函数名>(istream stream){
//自定义语句
return stream;
}
3.flags:
flag参数 | 作用 |
---|---|
ios::fixed | 定点数表示实数 |
ios::scientific | 科学计数法表示实数 |
ios::left | 左对齐 |
ios::right | 右对齐 |
ios::uppercase | 大写表示 |
ios::showpos | 输出正数时给出+ |
ios::skipws | 忽略前导空格 |
C++把文件看作是一个字符(字节)的序列,即由一个个字符(字节)顺序组成;
根据数据组织形式,可分为ASCII文档和二进制文件
2.文件流 iostream->fstream
istream->ifstream (mod值ios::in)
ostream->ofstream (mod值ios::out)
void open(char *filename,int mod);//使用open()函数简历或打开一个文件
void close();//使用close()函数关闭一个文件
void read(char *ch,int len);//读入len个字符
void write(char *ch,int len);//读入len个字符
//示例
#include
#include
using namespace std;
int main(){
char s[100];
ofstream ostrm;
ostrm.open("f1.txt",ios::out);
ostrm.write(s,10);
ostrm<<120<>s;
istrm.read(s,10);
istrm.close();
}
五、字符串流(内存流)
1.特点
以字符数组作为输入输出对象
具有相应缓冲区
在字符数组中可以存放字符,也可以存放整数、浮点数
2.原型ostrstream::ostrstream(char *buffer,int n,int mod=ios::out);
istrstream::istrstream(char *buffer,int n);
istrstream::istrstream(char *buffer);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)