C++ 输入与输出流(cin与cout)

本文介绍了C++中的输入输出流机制,包括标准输入输出流cin和cout的使用,以及标准错误流cerr和日志流clog。通过示例展示了如何进行基本的输入输出操作,如使用cin进行数据输入,cout进行数据输出,以及cin.getline()、cin.peek()等方法的使用,强调了输入输出流在C++编程中的重要性。

一个完整C++程序应包含的要素

在这里插入图片描述

IDE(Integrated Developed Environment)即一个集成开发环境,此专栏我们使用VisualStudio2019编译平台进行C++程序的编译


初识输入输出

首先C++并未定义任何输入输出IO语句,但是C++以包含全面的标准库的形式,提供了IO输入输出流机制,要使用这个机制我们需要在程序开头包含一个iosteam库文件,例如:

#include <iostream>

其包含两个基础类型 istreamostream 分别表示输入流和输出流


什么是流

一个流就是一个字符序列,是从从IO设备读出或写入IO设备的,流(stream)想表达的是,随着时间的推移,字符是顺序生成或消耗的

标准输入输出对象

标准库定义了四个IO对象,用于四种不同情况的标准输入输出

处理输入 : 名为cinistream类型对象 这个对象被称为标准输入

处理输出 : 名为outostream类型对象 此对象称为标准输出

处理警告和错误信息 : 名为cerrostream类型对象 此对象称为标准错误

处理一般性信息 : 名为clogostream类型对象


标准输入输出流的实际应用

利用标准输入cin和标准输出cout进行两个整型变量之间的加法运算


#include <iostream>//定义了ostream类  不能加上 .h
//通常情况下 #include必须出现在所有函数之外 一般将此指令放在源文件开始位置

using namespace std;//标准命名空间  标准库定义的所有名字都在命名空间std中

int main()
{
	cout << "请输入两个参数" << endl;//表达式中的<<为输出运算符 在标准输出上打印消息
	//<<输出运算符接收两个运算对象 左侧必须是一个ostream对象 右侧对象为需要打印的值 将给定的值写道给定的ostream对象中
	//输出语句使用两次<<运算符时 第一个运算符的结果就成了第二个运算符的左侧运算对象 就可以将输出请求连接
	//因此 此表达式等价于	(cout << "请输入两个参数" )<< endl;

	//第一个运算符<<给用户打印一个字符串面值常量消息 是用一对双引号包围的字符序列 双引号之间的文本被打印到标准输出

	//第二个运算符<<打印endl 是一个被称为操纵符的特殊值 效果是结束当前行
	int v1 = 0, v2 = 0;

	cin >> v1 >> v2;
	//输入运算符>>接收一个istream输入流作为其左侧运算对象 接受一个对象作为右侧运算对象
	//从给定的istream读入数据 并存入给定对象中 返回其左侧运算对象作为计算结果 
	//因此 此表达式等价于	(cin >> v1 )>> v2;
    
	cout << "参数" << v1 << "和参数" << v2 << "的和为" << v1 + v2 << endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述


标准输出流(cout)

<<输出运算符(流提取运算符)

<<输出运算符用于在标准输出上打印消息,其接收两个运算对象,左侧必须是一个ostream对象,右侧对象为需要打印的值,将给定的值写入给定的ostream对象中,当输出语句使用两次<<运算符时,第一个运算符的结果就成了第二个运算符的左侧运算对象,就可以将输出请求连接

endl是一个被称为操纵符,目的是结束当前输出流


标准输入流(cin)

预定义的对象ciniostream类的一个实例对象.cin对象附属到标准输入设备,通常是键盘cin是与流提取运算符>>结合使用,用于输入指定参数到输入流中.

>>输出运算符(流插入运算符)

>>输入运算符接收一个istream输入流作为其左侧运算对象,接受一个输入值对象作为右侧运算对象,从给定的istream流中读入数据,并存入给定对象中,返回其左侧运算对象作为计算结果

输入流输入运算符输入多个数据

cin >> one>> two;

上述代码相当于以下语句

cin >> name;
cin >> age;


标准错误流(cerr)

预定义的对象cerriostream类的一个实例对象,cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是 非缓冲的,即每个流插入到cerr 都会立即输出,且cerr也是与流插入运算符<<结合使用的=


标准日志流(clog)=

预定义的对象clogiostream类的一个实例,clog 对象附属到标准错误设备,通常也是显示屏,但是clog 对象是缓冲的,这意味着每个流插入到clog都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出

我们暂时无法区分cout,cerr,```clog之间的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显.所以良好的编程实践告诉我们,使用 cerr流来显示错误消息,而其他的日志消息则使用clog流来输出


案例二 读取数量不定的输入数据

在这里插入图片描述
在这里插入图片描述
:使用cin输入数据时windows系统下默认.输入结束条件为:遇到EnterSpaceTab
在从键盘向程序输入数据时,对于如何指出文件结束,window系统中,输入文件结束符的方法是键入,Ctrl+Z然后按下回车键


C++标准输入流(cin)中的方法

在这里插入图片描述

cin.ignore() 与 cin.getline

cin.ignore()函数中有两个参数,分别为数值型的a字符型的 ch ,即cin.ignore( a, ch )
cin.getline()函数中有三个参数,分别为 数组名 长度 结束符 大体与 cin.get(数组名,长度,结束符)类似(实际能读取长度-1个字符,因为字符串结尾是0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由此可见
cin.ignore():的第一个参数 规定了从流中忽略的数据的个数 在此数目之前的参数(包括回车)都将从流中清除出去
cin.getline(): 的第一个参数 指定数组名 第二个参数为失效位 大于此失效位的输入被阻断(此函数会一次读取多个字符(包括空白字符)也就是说 如果cin.getline未设置失效位 将返回 带有空白字符的参数 而cin是空白字符为结束输入符的 所以cin.getline的另一功能为 显示带有空白字符的参数)


cin.peek()cin.get()

cin.peek(): 返回缓冲区中的下一个字符,但只是查看,并不从缓冲区中取出

cin.get():有三个参数分别是数组名 长度 结束符 ,其中结束符为可选参数,读入的字符个数最多为长度减1个,结束符规定结束字符串读取的字符,默认为ENTER
在这里插入图片描述
在这里插入图片描述
程序遇到字符A停止,A仍停留在输入流中.可见,使用peek的效果相当于先用get()读取一个字符,再用putback()将字符放入输入流中

cin.get():不会丢失任何空白符号
cin.get():当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据.但是当cin.getline()输入超长时,会引起cin函数的错误,之后的cin操作将不再执行


cin.gcount()cin.read()cout.write

cin.gcount():输出 ** 输入流缓存区cin中的单位数据的数目**
cin.read():两个参数 ** 数组名 长度 ** 从字符串流中读取n个字符到c数组中
cout.write():两个参数 ** 数组名 长度 ** 输出n个字符到字符串输出流中
在这里插入图片描述
在这里插入图片描述

注意:🎯

1.使用cin,从流中读出的字符,流中就没有这字符了,再次读取时只能读取流中剩下的
2.缓冲区只有在遇到 EOF、手动敲回车、流(缓存区)满时,才将流中的字符全部读出(即清空缓存区)
注:EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取,通常在文本的最后存在此字符表示资料结束

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值