c++ 流类库

I/O流概念: 流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动 

程序将流动对象看作是文件对象的化身

读操作为:提取

写操作为:插入

在I/O流中 已经声名了4个流对象

输入:cin 输出:cout cerr clog

I/O流类层次图

抽象流基类

类名头文件
iosios流基类

输入流类:

类名头文件
istreamistream通用输入流
ifstreamfstream文件输入流
istringstreamsstream字符串输入流

输出流:

类名头文件
ostreamostream通用输出流
ofstreamfstream文件输出流
ostringstreamsstream字符输出流

输入输出流:

类名头文件
iostreamistream通用输入输出流
fstreamfstream文件输入输出流
stringstreamsstream字符输入输出流

流缓冲区类:

类名头文件
streambufstreambuf抽象流缓冲
filebuffstream磁盘文件流缓冲区
stringbufsstream字符串的流缓冲区

cout:标准输出流

cerr:标准错误输出流,没有缓冲,发送给它的内容立即被输出

clog :类似与cerr 但clog有缓冲,缓冲区满时被输出

1.常用的插入运算符和操纵符:

cout.width()  输出宽度
cout.fill()(默认空格)设置填充
setw()  输出宽度

1.使用cout.width()控制宽度

	vector<int>p1;
	for (int i = 0; i < 5; i++)
	{
		p1.push_back(i);
	}
	for (vector<int>::iterator it = p1.begin(); it != p1.end(); it++)
	{
		//10的宽度
		cout.width(10);
		cout << *it << endl;
	}

 

2.默认以空格填充

cout.fill()可以改变填充

	vector<int>p1;
	for (int i = 0; i < 5; i++)
	{
		p1.push_back(i);
	}
	for (vector<int>::iterator it = p1.begin(); it != p1.end(); it++)
	{
		//10的宽度
		cout.width(10);
		//用*填充
		cout.fill('*');
		cout << *it << endl;
	}

 3.使用setw()指定宽度

需要添加头文件#include<iomanip>

	vector<int>p1;
	for (int i = 0; i < 5; i++)
	{
		p1.push_back(i);
	}
	//设置宽度
	cout << setw(6) << p1[0] << endl;;
	cout << setw(7) << p1[1] << endl;
	cout << setw(8) << p1[2] << endl;
	cout << setw(9) << p1[3] << endl;
	cout << setw(10) << p1[4] << endl;

2.对齐方式

头文件:#include<iomanip>

使用 setiosflags() 操纵符设置

用  resetionsflags () 来关闭

以下可以   用   |   混合使用

ios_base::skipws输出中跳过空白
ios_base::left左对齐 填充右边
ios_base::right右对齐  填充左边
ios_base::internal在规定宽度内,指定前缀符号子后,数值之前插入填充夫符号
ios_base::dec以十进制形式格式化数值
ios_base::oct以八进制形式格式化数值
ios_base::hex以十六进制形式格式化数值
ios_base::showbase插入前缀符号以表明整数的数值
ios_base::showPoint对浮点数值显示小数点和尾部的0
ios_base::uppercase对于十六进制数值显示大写字母A-F,对于科学格式显示大写字母E
ios_base::showpos对于正数显示‘+’号
ios_base::scientific以科学格式显示浮点数值。
ios_base::fixed以定点格式显示浮点数值(不含指数部分)
ios_base::unitbuf在每次插入之前转储并清除缓冲区内容

3.精度

头文件:#include<iomanip>

利用 setprecision 操纵符

浮点数默认精度为 6

ios_base::fixed不够 后面补零
ios_base::scientific用科学计数法
	double man[] = { 1.23, 25.36, 655.655, 255,2444, 2555,244444 };
	string name[] = { "A","B","C","D","E" };
	//不用科学计数法
	cout << setiosflags(ios_base::fixed);
	for (int i = 0; i < 5; i++)
	{
		cout << setiosflags(ios_base::left)
			<< setw(8) << name[i]
			<< resetiosflags(ios_base::left)
			<< setw(10)
			//设置精度
			<< setiosflags(3) << man[i] << endl;
	}
	return 0;

4.输入输出的成员方法

(cin)输入的成员方法:

get()获取输入流中的一个字符,会删除输入该字符流中的
gcount() 返回上次从输入流提取出的字符个数
getline(str,n,ch)从输入流中接收 n-1 个字符给 str 变量,当遇到指定 ch 字符时会停止读取,默认情况下 ch 为 '\0'
peek()返回输入流中的第一个字符
putback(c) 将字符 c 置入输入流(缓冲区)
ignore(n,ch)从输入流中逐个提取字符,但提取出的字符被忽略,不被使用,直至提取出 n 个字符,或者当前读取的字符为 ch
operator>>用于读取指定类型的数据,并返回输入流对象本身(重载>>运算符)

get()的用法

  1. cin.get()
  2. cin.get(ch)  拥有一个参数,把读取到的字符赋值给 ch   读取成功则函数返回true,失败则返回flase
  3. cin.get(char * ch ,number,end) ch为字符数组,number为读取的字符个数,end为结束条件(可以不填写)

注意事项

  1.  cin.get(char * ch ,number,end) 最多只会读取 number-1个字符,最后一个字符存放结束符 '\0' 。
  2. 当 number 大于 字符字符数组的容量时,如果输入的个数小于字符字符数组的容量:可以正常运行,输入的个数大于等于字符字符数组的容量:报错,数组越界

getline()的用法 

  1. 第三个参数默认为 '\0' 
  2. getline()可以读取空格

 (cout)输出的成员方法

put()输出单个字符。
write()输出指定的字符串。
tellp()用于获取当前输出流指针的位置。
seekp()设置输出流指针的位置。
flush()刷新输出流缓冲区。
operator<<重载 << 运算符,使其用于输出其后指定类型的数据。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值