C++ ——流操作符

C++

  • 知识基础
  • 流操作符
  • 类 & 基础
  • 初始化和重载
  • 类 & 高级
  • 继承和多态
  • 模板 & 标准模板库STL


了解最C++最基本的输入输出,熟悉使用方法,虽然兼容C语言,但是C++的使用方法能帮助我们理解面向对象的基础!

一、流操作符

1.基本介绍

操作符说明
>>流提取操作符
<<流插入操作符

我们在C语言中已经提及过流的概念,对于各种数据向指定目标读写,提及过缓冲区的概念;类似的,在C++中我们定义了一些对象(读写的目标),定义好了对这些对象读写的方式,可以使用流操作符直接实现对流对象的读写。
最一般的iostreamfstream对应控制台输入输出流和文件操作流;还有sstream字符串操作流。
本质上是封装了C语言中各类输入输出函数(不论是对控制台的还是文件的),通过统一的操作符实现,方便我们的使用;使用时要声明相应的头文件;

#include<iostream>
using namespace std;
#include<fstream>
#include<sstream>

流操作符的左部是操作对象,右部是数据变量,操作符方向指明了数据流动的方向,写入数据变量或者读取数据变量到对象之中。
流操作中流动的数据本质上是文本字符,流操作符会完成各种基本类型到字符串类型的转换

2.格式化控制

以字符串形式的流操作就一定会存在格式化控制,在C++中可以通过一些格式化函数控制流中的文本格式:
头文件 #include<iomanip>

  • 默认
    域宽确定;
    输出精度,浮点型有效位6位,
    右对齐,无填充。

  • setw(val)

操作符说明
对象>>setw(val)>>a指定输入的域宽,从对象读出时最多只提取val位
对象<<setw(val)<<a指定输出的域宽,a在对象中的存在至少占val位,超过不截断

只对相邻的一项有效

  • setprecision(val)
操作符说明
对象<<setprecision(val)<<a指定输出的有效位数,指定的太大则规定失效

对指定之后的所有数据生效

  • setiosflags(状态标志)
状态标志说明
ios::left左对齐,右边填充空格
ios::right右对齐,左边填充空格,默认
ios::fixed以定点形式输出浮点数
ios::scientific以科学计数法输出浮点数
ios::dec随后输出的所有整数为十进制
ios::hex随后输出的所有整数为十六进制
ios::oct随后输出的所有整数为八进制
ios::showpoint输出小数点和尾部的零
ios::showpos输出正数前的+
ios::uppercase十六进制使用大写字母输出

二、简单输入输出

流操作符最常用的操作自然是向控制台的输入和输出,在#include<iostream>中我们定义了标准输入输出类,并定义好了实例cincout,关于类的知识我们在下一节讲解,这里我们简单了解用法就好;

1.cout对象

配合<<使用,是ostream类的一个实例,表示数据流向控制台,写在命令窗口上,作为一个封装好的实例,ostream类包含了一些定义好的成员函数,同样能够实现格式化控制输出。

在输出之前设置

  • cout.width(val);
  • cout.precision(val);
  • cout.setf(flag);
  • cout.unsetf(flag);

2.cin对象

配合>>使用,是istream类的一个实例,表示控制台数据流向变量,除去类似cout的操作,istream定义的成员函数实现了一些对字符串读取:

  • cin>>a,以空白字符为间断,跳过所有的空白字符,设置域宽也不能解决空格中断。
  • cin.getline(str, size);,最多读取size-1大小的一行字符,遇到换行符结束读取,末尾添加\0。(读取但不存储\n
  • cin.get();,一次读取一个字符,包括空白字符。
  • cin.ignore(n, c);,控制忽略,cin跳过n个字符或者遇到字符c忽略它;不设参数时忽略当前缓存区的第一个字符;常用来处理>>之后剩余的换行符!!!

3.操作符

操作符可以直接跟在流操作符之后,表示特定的操作,最常用的的cout<<endl

操作符描述输入输出
boolalpha启用boolalpha标志
dec启用dec标志
endl输出换行标示,并清空缓冲区
ends输出空字符
fixed启用fixed标志
flush清空流
hex启用 hex 标志
internal启用 internal 标志
left启用 left 标志
noboolalpha关闭boolalpha 标志
noshowbase关闭showbase 标志
noshowpoint关闭showpoint 标志
noshowpos关闭showpos 标志
noskipws关闭skipws 标志
nounitbuf关闭unitbuf 标志
nouppercase关闭uppercase 标志
oct启用 oct 标志
right启用 right 标志
scientific启用 scientific 标志
showbase启用 showbase 标志
showpoint启用 showpoint 标志
showpos启用 showpos 标志
skipws启用 skipws 标志
unitbuf启用 unitbuf 标志
uppercase启用 uppercase 标志
ws跳过所有前导空白字符

三、文件输入输出

类似的,在#include<fstream>中定义了文件流类型,不同于控制台流的是,并不存在标准流,所以我们需要在程序中自己定义文件流类的实例;
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。
定义了三个新的数据类型:

数据类型描述
ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream该数据类型表示输入文件流,用于从文件读取信息。
fstream该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。
#include<iostream>
using namespace std;
#include<fstream>
int main(){
	ofstream file;
}

1.打开关闭文件

cin这样的实例已经绑定了标准输入,对应的我们也要为文件流绑定对应的文件,最后也要关闭这种绑定,释放资源。在C++中我们定义了成员函数实现这种操作:

  • file.open(filename, flags) ,可以以不同的权限打开文件。
模式标志描述
ios::app追加模式。所有写入都追加到文件末尾。
ios::ate文件打开后定位到文件末尾。
ios::in打开文件用于读取。
ios::out打开文件用于写入。
ios::trunc如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。
  • file.close(),关闭相应的文件流!

2.文件读写、状态控制

关于文本文件读写可以直接使用流操作符实现,与向coutcin的操作是完全一致的,这也就体现了我们面向对象的好处!
同样,文件流也定义了成员函数,对于二进制文件的读写要借助于成员函数:

  • file.write((cahr*)buffer, sizeof(buffer));之后对文件的写入操作会识别相应的数据类型,以二进制写入。
  • file.read((cahr*)buffer, sizeof(buffer));之后对文件的读取操作会识别相应的数据类型,读出转化二进制数据存入相应变量。
成员函数含义
eof()到达文件末尾返回非零,否则返回零

总结

C++的输入输出主要通过库中已经定义的类实现,各种功能通过成员函数来实现,常用的成员函数一定要掌握,其他的在今后学习中慢慢了解即可,我们涉及到的读写控制其实是不多的/(ㄒoㄒ)/~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值