C++流与文件

输入(input)是将计算机输入设备上的数据读入内存,并赋给相应的变量;输出(output)是将数据输出到计算机的输出设备上;将上述操作简称为I/O;
一:C++的流
a.C++的输入、输出系统通过一种称为流的机制实现文件和控制台的输入输出操作。流是指数据从一处流向另一处时形成的数据流,它分为输入流和输出流。
b.在进行输入输出操作时,首先进行打开操作,使流与文件建立联系。建立联系后的文件才允许流入或流出数据,输入或输出操作结束后,使用关闭操作使文件与流断开联系;
c.C++中所有流是相同的,但文件可以不同。程序用流统一对各种计算机设备和文件进行操作,使程序与设备无关,程序与文件无关,提高了程序设计的通用性和灵活性。
(一)预定义流
1.在程序开始运行时C++会自动打开4个流,这4个流是C++流库中定义的流:(所属类库均为iostream.h)
cin标准输入,缺省设备为键盘
cout标准输出,缺省设备为显示器
cerr标准错误,缺省设备为显示器
clog标准缓冲,缺省设备为显示器
2.C++的流通过重载运算符<<和>>执行输入和输出操作。输出操作是像流中插入一个字符序列,因此在流操作中将运算符<<称为插入运算符,输入操作是从流中提取一个字符系列,因此将运算符>>称为提取运算符;
3.cout实际上,位于插入运算符右侧的字符串被存储在<<左侧的流中;cout是数据的目的地,cout一般与标准输出设备(显示器)连接;
4.cerr流:
a.cerr不能重定向;
b.不能被缓冲,他的输出总是直接传送到标准输出设备上;
c.错误信息是写到cerr的逻辑项;cerr<<“Error”<<"\n";
5.clog流:可以被缓冲,但不能重定向,在有些系统中,使用clog代替cerr,可以改进显示速度:clog<<“Error”<<"\n";
(二)iostream库
1.iostream库的一个重要用途就是能够把对象从二进制转换为文本形式,或从文本转换为二进制,同时,iostream库还提供读写标准数据类型对象的流,如cout,cin;
2.典型iostream库中包含的类:
在这里插入图片描述
在这里插入图片描述
二:格式化I/O
格式化输出有两种方法:
a.使用类iOS的成员函数;
b.使用一种称作操纵符的特殊函数;
(一)用iOS类的成员函数实现格式化输入/输出:
1.每个C++流都有许多格式标识符(flag),这些标识符决定数据的显示形式,他们被编码为一个长整型数,I/O格式由各种格式状态标志确定,这些状态在iOS类中定义为公有的枚举量;
在iostream.h中定义了下面的枚举:
enum
{
skipws=0x0001,
left=0x0002,
right=0x0004,
internal=0x0008,
dec=0x0010,
oct=0x0020,
hex=0x0040,
showbase=0x0080,
showpoint=0x0100,
upercase=0x0200,
showpos=0x0400,
scientific=0x0800,
fixed=0x1000,
unitbuf=0x2000,
stdio=0x4000
};
注:
a.此枚举中定义的值用于控制输入/输出格式的信息标志,总的来说设置一个格式标志符相当于打开了一个特征开关,清除格式标志符相当于恢复缺省的I/O格式标志;
b.如果设置了skipws标志,则提取时跳过前边的空白字符(包括空格,制表符,换行符),否则不忽略空白字符,默认为设置skipws标志;
c.在任何时候只能设置left,right,internal三个标志中的一个,如果设置了标志left则输出按左对齐方式输出。如果设置了标志right则按右对齐方式输出。如果设置了标志internal,则在待输出的任何符号和基本字符键填充一定数量的空格。如果没有设置这些标志,则输出数据时采用系统定义的默认格式;
d.标志oct,hex,dec控制显示数值的基准,依次代表以十进制,八进制,十六进制输出数值,默认设置为dec;
e.如果设置了showbase标志,则输出的数值型数值左侧会显示“基准指示符号”,例如,如果设置了hex标志,则任何数据型输出的左侧都会显示“0x”,默认为不设置;
f.设置了showpoint标志后,强迫显示浮点数和双精度浮点数型时显示小数点,并且给没达到规定长度的浮点数和双精度浮点数填充0,默认为不设置;
g.如果设置了uppercase,则数值中的所有字符都以大写形式显示,默认为不设置;
h.如果设置了showpos,则显示正数时,在数据左侧加上一个正号“+”,默认不设置;
i.对于scientific,fixed标志,如果设置了scientific标志,则浮点数用科学计数法输出,如果设置了fixed标志,则浮点数按常规显示,如果不设置这两个标志,则编译程序将选择两者中的一种作为适当的显示方式;
j.如果设置了unitbuf标志,则输出后立即对流进行刷新,在每个输出操作之后,C++的I/O系统将对其所有输出流,这样可以使C++的I/O系统的性能得到改进;
k.如果设置了stdio标志,则每次输出后,刷新stdout和stderr,刷新一个流表示将输出写到与流相连的物理设备上;
2.可以用函数setf()设置格式标志,函数原型为:
long setf(long flags);
函数返回格式标志的当前值,并设置由flags声明的标志;
例要设置showpoint标志,则可使用下列语句,语句中的stream为使用的流:
stream.setf(ios::showpoint);
3.例:使用函数setf()设置输出格式:
#include<iostream.h>
void main()
{
char *ch=“output:”;
cout.setf(ios::uppercase);
cout.setf(ios::showpos);
cout.setf(ios::scientific);
cout<<ch<<123<<","<<123.22<<"\n";
}
程序输出结果为:
OUT

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值