ios流类库体系及格式控制

C++没有输入/输出语句,在标准库里面包含了一个I/O流库。

一、缓冲区

什么是缓冲区
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

为什么要引入缓冲区
我们为什么要引入缓冲区呢?
比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区
可大大提高计算机的运行速度
又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情

输出/输出是站在文件的角度,从文件流出是输出,从文件流入是输入。
现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

缓冲区的类型
缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。
1、全缓冲
在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。
2、行缓冲
在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。
3、不带缓冲
也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。
缓冲区的刷新
下列情况会引发缓冲区的刷新:
1、缓冲区满时
2、执行flush语句;
3、执行endl语句;


4、关闭文件。

可见,缓冲区满或关闭文件时都会刷新缓冲区,进行真正的I/O操作。另外,在C++中,我们可以使用flush函数来刷新缓冲区(执行I/O操作并清空缓冲区),如:
cout<<flush; //将显存的内容立即输出到显示器上进行显示

endl控制符的作用是将光标移动到输出设备中下一行开头处,并且清空缓冲区。
cout<<endl;

streambuff是一个独立的类,只是iOS有一个保护访问限制的指针指向他,它的作用就是管理一个流的缓冲区。

输出重定向:将输出的内容重新定义输出方向。

流类库中两部分功能:标准输入/输出,文件处理。

流类库中定义了四个全局流对象:cin cout cerr clog,可以完成人机交互的功能。

其中cin cout clog 是带缓冲区的,缓冲区由streambuff类对象来管理,而cerr不带缓冲区,一旦错误立即报告显示。

二、cout格式控制输出

 

iOS::dec  以10进制表示整数 
ios::hex  以16进制表示整数 
ios::oct  以8进制表示整数  
setfill(*) 设填充字符为*  
setprecision(n) 设显示小数精度为n位   
setw(n) 设域宽为n个字符   
setiosflags(ios::fixed) 固定的浮点显示   
setiosflags(ios::scientific) 指数表示   
setiosflags(ios::left) 左对齐   
setiosflags(ios::right) 右对齐   
setiosflags(ios::skipws) 忽略前导空白   
setiosflags(ios::uppercase)16进制数大写输出   
setiosflags(ios::lowercase)16进制数小写输出

ios::dec  以10进制表示整数 
ios::hex  以16进制表示整数 
ios::oct  以8进制表示整数 
ios::showbase  为整数添加一个表示其进制的前缀 
ios::internal  在符号位和数值的中间插入需要数量的填充字符以使串两端对齐 
ios::left  在串的末尾插入填充字符以使串居左对齐 
ios::right  在串的前面插入填充字符以使串居右对齐 
ios::boolalpha  将bool类型的值以true或flase表示,而不是1或0 
ios::fixed  将符点数按照普通定点格式处理(非科学计数法) 
ios::scientific  将符点数按照科学计数法处理(带指数域) 
ios::showpoint  在浮点数表示的小数中强制插入小数点(默认情况是浮点数表示的整数不显示小数点) 
ios::showpos  强制在正数前添加+号 
ios::skipws  忽略前导的空格(主要用于输入流,如cin) 
ios::unitbuf  在插入(每次输出)操作后清空缓存 
ios::uppercase  强制大写字母 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值