C++输入输出流详解

来源:互联网 发布:淘宝卖家工具 编辑:程序博客网 时间:2024/06/14 07:04
前面的示例程序提供与用户的交互,如果任何。他们只是简单值打印在屏幕上,但标准库提供了许多额外的互动方式与用户通过输入/输出特性。本节将提供一个简短的介绍的一些最有用的。
c++使用方便称为流执行输入和输出操作的抽象在连续的媒体如屏幕、键盘或文件。流是一个实体,一个程序可以插入或提取字符/。不需要知道细节相关的媒体流或其内部规范。所有我们需要知道的是,流的源/目标人物,而这些人物提供/接受顺序(即。一个接一个地)。
标准库定义了几个流对象,可用于访问什么被认为是标准的源和目的地的角色通过程序运行的环境:

描述
cin标准输入流
cout标准输出流
cerr标准错误(输出)流
阻塞标准日志(输出)流
我们将看到只有cout详细和cin(标准输出和输入流);cerr和阻塞也输出流,所以他们基本上工作像cout,唯一的区别是,他们确定流为特定目的:错误信息和日志记录,这在许多情况下,在大多数环境设置,他们实际上做完全一样的事情:他们打印在屏幕上,虽然他们也可以单独重定向。
标准输出(cout)
在大多数项目环境中,在默认情况下,标准输出屏幕,c++流对象定义是cout访问它。
格式化的输出操作,cout与插入操作符一起使用,写成< <(即。,两个“小于”)的迹象。
cout < <“输出句子”;/ /句子在屏幕上打印输出
cout < < 120;/ /打印屏幕上的数字120
cout < < x;/ /打印在屏幕上x的值
< <操作符将遵循它的数据插入到它前面流。在上面的例子中,它插入文字字符串输出句子,120年,数量和变量x的值到标准输出流cout。注意句子的第一个语句是包含在双引号(“),因为它是一个字符串,在最后一个,x不是。双引用是区别;当他们之间的文本是封闭的,文字是印字面上;当他们没有,文本解读为一个变量的标识符,并打印它的价值。例如,这两个句子有截然不同的结果:
cout < <“你好”;/ /打印你好
cout < <你好;/ /打印变量的内容你好
多个插入操作(< <)可能被锁在一个声明:
cout < <”这种“< <”是一个“< <”单一的c++语句”;
最后声明将打印的文本这是一个c++语句。链接插入混合特别有用文字和变量在一个声明:
cout < <“我”< < < <时代“岁和我zipcode”< < zipcode;
假设年龄变量包含价值24和90064年zipcode变量包含前面的sql语句的输出是:
我24岁,我的邮政编码是90064
cout不做自动添加换行符结束时,除非指示这样做。例如,考虑以下两个语句插入cout:
cout < <。”“这是一句话;
cout < <“这是另一个句子。”;
输出将在一行,没有任何换行符。喜欢的东西:
这是一个句子。这是另一个句子。
插入一个换行符,插入一个新行字符应在准确的位置应该被打破。在c++中,可以指定一个新行字符\ n(即。,一个反斜杠字符后跟一个小写字母n)。例如:
cout < <“第一句话。\ n”;
cout < <“第二句。\ nThird句子。”;
这产生以下输出:
第一个句子。
第二个句子。
第三个句子。
或者,endl操纵者也可以用来打破行。例如:
cout < <”第一句话。“< < endl;
cout < <“第二句。“< < endl;
这将打印:
第一个句子。
第二个句子。
endl机械手产生一个换行符,完全按照“\ n”的插入,但它也有一个额外的行为:流的缓冲区刷新(如果有的话),这意味着输出请求写入装置,如果没有了。这种影响主要是完全缓冲流,cout(通常)不是一个完全缓冲流。不过,这通常是一个好主意使用endl只有当冲洗流特性,当它不会“\ n”。记住,冲洗操作带来一定的开销,和一些设备可能产生延迟。
标准输入(cin)
在大多数项目环境中,在默认情况下,标准输入键盘,c++流对象定义访问cin。
格式化的输入操作,cin与萃取操作符一起使用,写成> >(即。,两个“大于”迹象)。这个操作符然后紧随其后的是变量提取的数据存储。例如:
int年龄;
cin > >年龄;
第一个语句声明一个int类型的变量称为年龄,和第二个摘录cin值存储。这个操作使程序等待输入cin;一般来说,这意味着该项目将等待用户输入一些序列与键盘。在这种情况下,注意人物介绍使用键盘时才传输到程序输入(或返回)键被按下。一旦提取操作的语句在cin,程序将等待,只要需要,直到一些输入。
cin的提取操作使用变量的类型> >操作符来确定后如何解读阅读从输入的字符,如果它是一个整数,预期的格式是一系列的数字,如果一个字符串序列的字符,等等。
/ / i / o的例子
# include < iostream >
使用名称空间性病;
int main()
{
int我;
cout < < "请输入一个整数的值:";
cin > >我;
cout < < "您输入的值是“< <我;
cout < <”和其双”< <我* 2 < <”。\ n”;
返回0;
}
请输入一个整数值:702
您输入的值是702,是1404年的两倍。
编辑和运行
正如您可以看到的,提取从cin似乎使任务的输入从标准输入非常简单明了。但是这种方法也有一个很大的缺点。发生了什么在上面的例子中,如果用户输入别的东西无法解释为一个整数吗?好吧,在这种情况下,提取操作失败。默认情况下,这让程序继续没有设置变量i的值,产生不确定的结果如果我以后使用的价值。
这是非常糟糕的程序行为。大多数程序预计行为以预期的方式不管用户类型,适当处理无效值。只有非常简单的程序应该依靠值从cin中直接提取没有进一步检查。稍后我们将看到如何stringstreams可以有更好的控制用户输入。
拔牙对cin也可以链接到请求多个数据在一个声明:
cin > > > > b;
这相当于:
cin > >;
cin > > b;
在这两种情况下,用户将引入两个值,一个用于变量,变量,另一个用于b。任何形式的空间用于单独的两个连续的输入操作,这可以是一个空间,一个标签或一个新行字符。
cin和字符串
提取运算符可用于cin获得字符串的字符以同样的方式与基本数据类型:
字符串mystring;
cin mystring > >;
然而,cin提取总是认为空间(空格、制表符、换行…)作为终止值提取,从而提取字符串意味着总是提取一个词,一个短语或整个句子
整个行cin,存在一个函数,名为getline,流(cin)作为第一个参数,和第二个字符串变量。例如:
/ / cin与字符串
# include < iostream >
# include <字符串>
使用名称空间性病;
int main()
{
字符串mystr;
cout < < "你叫什么名字?”;
mystr getline(cin);
cout < <“Hello”< < mystr < <”。\ n”;
你最喜欢的团队cout < < "是什么?”;
mystr getline(cin);
cout < <“我喜欢”< < mystr < <“! \ n”;
返回0;
}
你叫什么名字?荷马·辛普森
你好荷马·辛普森。
你最喜欢的球队是什么?的同位素
我也喜欢同位素!
编辑和运行
注意在这两个调用getline,我们使用相同的字符串标识符(mystr)。什么程序在第二个调用只是前面的内容替换为新介绍。
标准的行为,大多数用户期望从一个控制台程序,每次程序查询用户输入,用户介绍了字段,然后按下ENTER键(或返回)。也就是说,输入通常是将发生的线路在控制台程序,这可以通过使用getline获得来自用户的输入。因此,除非你有强烈的理由不去,你应该始终使用getline投入您的控制台程序,而不是从cin提取。
stringstream
标准头< sstream >定义了一个类型被称为stringstream,允许将一个字符串当作一个流,从而允许提取或插入操作从/到字符串一样他们在cin和cout执行。这个特性是最有用的将字符串转换为数值,反之亦然。例如,为了我们可以写从字符串中提取一个整数:
字符串mystr(“1204”);
int敏;
stringstream(mystr)> >敏;
这个声明和初始化一个字符串的值“1204”,和一个int类型的变量,然后第三行从stringstream由使用该变量提取子字符串。这段代码存储在变量称为敏数值1204。
/ / stringstreams
# include < iostream >
# include <字符串>
# include < sstream >
使用名称空间性病;
int main()
{
字符串mystr;
浮动价格= 0;
int数量= 0;
cout < <“输入价格:”;
mystr getline(cin);
stringstream(mystr)> >价格;
cout < <“输入数量:”;
mystr getline(cin);
stringstream(mystr)> >数量;
cout < < "总价:“< <价格*数量< < endl;
返回0;
}
输入价格:22.25
输入数量:7
总价格:155.75
编辑和运行
在这个例子中,我们从标准输入间接获取数值:而不是直接从cin提取数值,我们从中获得行成一个字符串对象(mystr),然后我们从这个字符串中提取值变量的价格和数量。一旦这些数值,可以执行算术运算,如增加他们获得一个总价格。
使用这种方法的整个线路和提取它们的内容,我们分开的过程从其解释用户输入数据,允许用户输入过程预计,同时获得更多的控制其内容转换成有用的数据的程序。
0 0
原创粉丝点击