当我在网上查看一些代码时,我发现
cin>>arr[0][0]>>arr[0][1]>>arr[0][2]
我在其中放置了一行由空格分隔的三个整数值。我看到这三个用空格分隔的整数变成了arr[0][0]
,arr[0][1]
和的值arr[0][2]
。
如果它们之间有多个空格,则不会造成任何麻烦。
PLZ,谁能解释我这是如何工作的?
大多数重载operator>>
首先消耗和丢弃所有空白字符。int
它们从流中的第一个非空白字符开始解析实际值(例如 an )。
从流中读取几乎任何类型的输入都会首先跳过任何前导空格,除非您明确关闭该功能。您应该阅读std::basic_istream
文档以获取更多信息:
提取一个可能跳过前面空格的整数值。该值存储到给定的参考值。
此函数的行为类似于
FormattedInputFunction
. 在构造和检查哨兵对象后,可能会跳过前导空格,然后通过调用std::num_get::get()
.
这同样适用于其他流输入函数,包括大多数格式说明符将在读取值之前消耗所有空白字符的scanf
系列:
在尝试解析输入之前,除
[
、c
和之外的所有转换说明符n
都会消耗并丢弃所有前导空白字符(好像通过调用 确定)。isspace
这些消耗的字符不计入指定的最大字段宽度。