C++输入输出流

C++输入输出流,第1张

C++输入输出流 一、关于C++ IO库 1.引言

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忽略前导空格
四、文件的输入输出 1.文件

​ 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);

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/993224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)