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

IDE(Integrated Developed Environment)即一个集成开发环境,此专栏我们使用VisualStudio2019编译平台进行C++程序的编译
初识输入输出
首先C++并未定义任何输入输出IO语句,但是C++以包含全面的标准库的形式,提供了IO输入输出流机制,要使用这个机制我们需要在程序开头包含一个iosteam库文件,例如:
#include <iostream>
其包含两个基础类型 istream和ostream 分别表示输入流和输出流
什么是流
一个流就是一个字符序列,是从从IO设备读出或写入IO设备的,流(stream)想表达的是,随着时间的推移,字符是顺序生成或消耗的
标准输入输出对象
标准库定义了四个IO对象,用于四种不同情况的标准输入输出
处理输入 : 名为cin的istream类型对象 这个对象被称为标准输入
处理输出 : 名为out的ostream类型对象 此对象称为标准输出
处理警告和错误信息 : 名为cerr的ostream类型对象 此对象称为标准错误
处理一般性信息 : 名为clog的ostream类型对象
标准输入输出流的实际应用
利用标准输入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)
预定义的对象cin是iostream类的一个实例对象.cin对象附属到标准输入设备,通常是键盘cin是与流提取运算符>>结合使用,用于输入指定参数到输入流中.
>>输出运算符(流插入运算符)
>>输入运算符接收一个istream输入流作为其左侧运算对象,接受一个输入值对象作为右侧运算对象,从给定的istream流中读入数据,并存入给定对象中,返回其左侧运算对象作为计算结果
输入流输入运算符输入多个数据:
cin >> one>> two;
上述代码相当于以下语句
cin >> name;
cin >> age;
标准错误流(cerr)
预定义的对象cerr是iostream类的一个实例对象,cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是 非缓冲的,即每个流插入到cerr 都会立即输出,且cerr也是与流插入运算符<<结合使用的=
标准日志流(clog)=
预定义的对象clog是iostream类的一个实例,clog 对象附属到标准错误设备,通常也是显示屏,但是clog 对象是缓冲的,这意味着每个流插入到clog都会先存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出
我们暂时无法区分cout,cerr,```clog之间的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显.所以良好的编程实践告诉我们,使用 cerr流来显示错误消息,而其他的日志消息则使用clog流来输出
案例二 读取数量不定的输入数据


注:使用cin输入数据时windows系统下默认.输入结束条件为:遇到Enter、Space、Tab键
在从键盘向程序输入数据时,对于如何指出文件结束,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的缩写,在操作系统中表示资料源无更多的资料可读取,通常在文本的最后存在此字符表示资料结束
本文介绍了C++中的输入输出流机制,包括标准输入输出流cin和cout的使用,以及标准错误流cerr和日志流clog。通过示例展示了如何进行基本的输入输出操作,如使用cin进行数据输入,cout进行数据输出,以及cin.getline()、cin.peek()等方法的使用,强调了输入输出流在C++编程中的重要性。
1035

被折叠的 条评论
为什么被折叠?



