前面章节的实例中的程序提供交互很少与用户,如果任何在所有。他们只是显示在屏幕上简单的值,但该标准库提供了很多附加的方式通过其输入/输出功能的用户交互。本节将简要介绍一些最有用的。
C ++使用一种称为方便抽象 流在顺序介质执行输入和输出操作,如屏幕,键盘或一个文件。一个 流是一个实体,其中程序可以插入或提取字符/从。没有必要知道相关联的流或任何其内部规格的媒体的信息。所有我们需要知道的是,流是字符的源/目的,而这些角色提供/接受顺序(即一个接一个)。
标准库定义了可以被用来访问该程序运行,其中什么被认为是由环境的字符的标准源和目的地流对象的少数:
我们将详细只能看到
对于格式化输出操作,
在
多个插入操作(<<)可以在单个语句被链接:
最后这句话将打印文本
假定 年龄变量包含值24和 邮政编码变量包含90064,先前语句的输出将是:
什么COUT不会自动做的就是添加换行符结尾,除非指示这样做。例如,采取以下两个语句插入
COUT <<;“这是一个句子。”
COUT <<“这是另一句话。”
输出将是在一个单一的线路,而无需任何线之间断英寸 喜欢的东西:
要插入换行符,新行字符应在准确的位置的线应被打破插入。在C ++中,一个新的行字符可以指定为
这将产生以下输出: 可替代地,操纵器还可以用于换行。例如:
这将打印: 该机器人产生一个换行符,完全一样的插入做的事情; 但它也有一个附加的问题:流的缓冲液(如果有的话)被刷新,这意味着被请求的输出进行物理写入设备,如果不是已经。这主要影响 全缓冲流,和(通常)不是 全缓冲流。尽管如此,它通常是用一个好主意刷新流将是一个功能只有在和当它不会。请记住,冲洗操作会带来一定的开销,而且在某些设备可能会产生延迟。
对于格式化的输入操作,
第一语句声明类型的变量
在提取操作
正如你可以看到,从提取
这是程序的行为非常差。大多数程序有望在预期的方式行事,不管什么类型的用户,妥善处理无效值。只有非常简单的程序应该依靠直接从提取的值
对提取物
这等同于:
在这两种情况下,用户被预期引入两个值,一个用于变量
然而,
为了从整条生产线
请注意,在这两个调用
该标准的行为,大多数用户从一个控制台程序想到的是,每次程序查询用户输入时,用户介绍了现场,然后按下 ENTER(或 RETURN)。这就是说,输入普遍预期在控制台程序线方面的情况发生,并且这可以通过使用来实现
声明一个
在这个例子中,我们获得的数值从 标准输入间接:不要直接从提取数值
与得到整个行,并提取其内容的这种方法,我们分离得到从它作为数据解释用户输入,从而允许输入处理是用户期望什么的过程中,并在同一时间获得更多控制的变换其内容转换成由程序有用的数据。
C ++使用一种称为方便抽象 流在顺序介质执行输入和输出操作,如屏幕,键盘或一个文件。一个 流是一个实体,其中程序可以插入或提取字符/从。没有必要知道相关联的流或任何其内部规格的媒体的信息。所有我们需要知道的是,流是字符的源/目的,而这些角色提供/接受顺序(即一个接一个)。
标准库定义了可以被用来访问该程序运行,其中什么被认为是由环境的字符的标准源和目的地流对象的少数:
流 | 描述 |
---|---|
cin | 标准输入流 |
cout | 标准输出流 |
cerr | 标准错误(输出)流 |
clog | 标准日志(输出)流 |
我们将详细只能看到
cout
和
cin
(标准输出和输入流);
cerr
并且
clog
也输出流,所以他们的工作原理实质上一样
cout
,唯一的不同是它们识别流为特定目的:错误消息和记录; 其中,在许多情况下,在大多数环境设置,实际上他们做同样的事情:他们在屏幕上打印,虽然他们也可以单独重定向。
标准输出(COUT)
在大多数程序的环境中,默认情况下,标准输出是屏幕,并定义了访问它是C ++流对象cout
。
对于格式化输出操作,
cout
与一起使用
插入运算符,这是写为
<<
(即两个“小于”的标志)。
| |
在
<<
操作者将它后面到它前面的流的数据。在上面的例子中,它插入文字串
Output sentence
,数字
120
,和变量的值
x
到标准的输出流
cout
。请注意,在第一次声明中的一句话被括在双引号(
"
),因为它是一个字符串,而在最后一个,
x
是不是。双引号是什么使的区别;当文本在它们之间封闭,文本打印字面上; 当它们不是,文本被解释为一个可变的识别符,并且它的值被打印代替。例如,这两个句子有很不同的结果:
| |
多个插入操作(<<)可以在单个语句被链接:
| |
最后这句话将打印文本
This is a single C++ statement
。链接插入是特别有用的在一条语句中混合文字和变量:
| |
假定 年龄变量包含值24和 邮政编码变量包含90064,先前语句的输出将是:
I am 24 years old and my zipcode is 90064
什么COUT不会自动做的就是添加换行符结尾,除非指示这样做。例如,采取以下两个语句插入
cout
:
COUT <<;“这是一个句子。”
COUT <<“这是另一句话。”
输出将是在一个单一的线路,而无需任何线之间断英寸 喜欢的东西:
This is a sentence.This is another sentence.
要插入换行符,新行字符应在准确的位置的线应被打破插入。在C ++中,一个新的行字符可以指定为
\n
(即反斜杠字符后跟一个小写
n
)。例如:
| |
这将产生以下输出: 可替代地,操纵器还可以用于换行。例如:
First sentence.
Second sentence.
Third sentence.
endl
| |
这将打印: 该机器人产生一个换行符,完全一样的插入做的事情; 但它也有一个附加的问题:流的缓冲液(如果有的话)被刷新,这意味着被请求的输出进行物理写入设备,如果不是已经。这主要影响 全缓冲流,和(通常)不是 全缓冲流。尽管如此,它通常是用一个好主意刷新流将是一个功能只有在和当它不会。请记住,冲洗操作会带来一定的开销,而且在某些设备可能会产生延迟。
First sentence.
Second sentence.
endl
'\n'
cout
endl
'\n'
标准输入(CIN)
在大多数程序的环境中,默认情况下,标准输入是键盘,并定义了访问它是C ++流对象cin
。
对于格式化的输入操作,
cin
与提取运算符,这是写为一起使用
>>
(即两个“大于”标志)。然后,该操作者后面,其中所提取的数据存储在变量中。例如:
| |
第一语句声明类型的变量
int
称为
age
,并且从第二提取物
cin
的值将被存储在其中。这个操作使得该程序等待来自输入
cin
; 通常,这意味着程序将等待用户输入用键盘一些序列。在这种情况下,请注意,使用键盘引入的字符时仅传输到节目
ENTER(或
RETURN按压)键。一旦与萃取操作语句
cin
到达时,程序将等待,只要需要直到有输入被引入。
在提取操作
cin
使用变量的类型的后
>>
操作者,以确定它如何解释从输入读出的字符; 如果它是一个整数,所预期的格式是一个序列的数字,如果字符串中的字符的序列,等。
| | 请输入一个整数值:702 您输入的值是702和的双重是1404。 |
|
正如你可以看到,从提取
cin
似乎让从标准输入非常简单和直接获得投入的任务。但这种方法也有一个很大的缺点。在如果用户输入别的东西不能被解释为一个整数上面的例子中,会发生什么?那么,在这种情况下,在提取操作将失败。而这一点,在默认情况下,让程序继续运行而无需设置变量的值
i
,从而产生不确定的结果,如果值
i
是使用更高版本。
这是程序的行为非常差。大多数程序有望在预期的方式行事,不管什么类型的用户,妥善处理无效值。只有非常简单的程序应该依靠直接从提取的值
cin
没有进一步的检查。过了一会儿,我们将看到如何
stringstreams可用于有超过用户输入的更好的控制。
对提取物
cin
还可以链接在一个声明中,要求多个数据:
| |
这等同于:
| |
在这两种情况下,用户被预期引入两个值,一个用于变量
a
,而另一个变量
b
。任何种类的空间用于分隔两个连续的输入操作; 这可以是一个空格,制表符或新行字符。
CIN和字符串
提取运算符可用于在cin
获得的字符的字符串以相同的方式,与基本数据类型:
| |
然而,
cin
提取始终把空格(空格,制表符,换行符...)作为终止值被提取,从而提取字符串意味着随时提取一个字,不是一个短语或整个句子。
为了从整条生产线
cin
,存在一个函数,称为
getline
,即取流(
cin
)作为第一个参数,并且该字符串变量第二。例如:
| | 你叫什么名字?辛普森 您好辛普森。 你最喜欢哪个队伍?同位素 我喜欢同位素呢! |
|
请注意,在这两个调用
getline
,我们使用相同的字符串标识(
mystr
)。什么程序会在第二个电话是简单地取代了以前的内容与引入新的。
该标准的行为,大多数用户从一个控制台程序想到的是,每次程序查询用户输入时,用户介绍了现场,然后按下 ENTER(或 RETURN)。这就是说,输入普遍预期在控制台程序线方面的情况发生,并且这可以通过使用来实现
getline
,以获得来自用户的输入。因此,除非你有很强的理由,否则你应该总是使用
getline
在你的控制台程序获得的输入,而不是从提取
cin
。
字符串流
标准头<sstream>
定义了一个名为类型
stringstream
,它允许,因为它们是在执行的字符串被处理为一个流,并因此允许提取或插入操作从/向以相同的方式串
cin
和
cout
。此功能是最有用的字符串转换为数值,反之亦然。例如,为了提取从我们可以写一个字符串的整数
| |
声明一个
string
与初始化为一个值
"1204"
,和类型的变量
int
。然后,第三行使用该变量以从提取
stringstream
从字符串构成。这段代码存储的数值
1204
称为变量
myint
。
| | 输入价格:22.25 输入数量:7 总价:155.75 |
|
在这个例子中,我们获得的数值从 标准输入间接:不要直接从提取数值
cin
,我们从它那里得到线到一个字符串对象(
mystr
),然后我们从该字符串中的变量提取值
price
和
quantity
。一旦这些数值,算术运算可以对它们进行,如将它们相乘,以获得总价格。
与得到整个行,并提取其内容的这种方法,我们分离得到从它作为数据解释用户输入,从而允许输入处理是用户期望什么的过程中,并在同一时间获得更多控制的变换其内容转换成由程序有用的数据。