我正在浏览关于 C++ 的谷歌大学部分,但我不确定这段代码的作用:
if (!(cin >> input_var)) {
cout << "you entered a non-numeric. Exiting..." << endl;
break;
}
if 语句中的语句在这里实际上做了什么?
谢谢!
我正在浏览关于 C++ 的谷歌大学部分,但我不确定这段代码的作用:
if (!(cin >> input_var)) {
cout << "you entered a non-numeric. Exiting..." << endl;
break;
}
if 语句中的语句在这里实际上做了什么?
谢谢!
这是非常基本的 C++。通常,>>
和<<
用于位移。但是,I/O 流库已重载operator>>
和operator<<
for 流,因此它们可以分别用于提取和插入。为什么?因为操作符看起来像两个有方向性的箭头,所以代码读起来很好——数据正朝着那个方向移动。
因此,在您的示例中,cin
是标准输入流,并且您正在从该流中提取一个整数到变量input_var
中。您读cin >> input_var
作“input_var
从标准输入中提取”。
同样,在if
语句的主体内,您将插入到标准输出流中,cout
.
I/O 重载operator<<
并operator>>
返回对您从中提取或插入的流的引用。此流可转换bool
为允许您检查其状态。也就是说,doingif (cin)
将检查cin
流的状态是否正常。在您的情况下,我们使用“not”运算符!
来检查流是否不正常。如果不是,我们输出错误。
值得一提的是,语句!(cin >> input_var)
内部if
并不是语句本身——它是一个表达式。
它读取一个int
(变量)并通过部件(有一个重载)input_var
检查读取是否成功。!(cin >> ...)
istream
operator !
if ( !(cin >> input_var) )
这>>
是一个为 重载的运算符std::istream&
,并根据input_var
特定重载的类型调用它从流中读取数据并存储在 中input_var
。运算符重载返回类型是std::istream&
,表示表达式的类型cin >> input_var
是std::istream&
,当在if
or中使用时while
,可以根据从流中读取是否成功自动转换为true
or 。false
因此,您可以在任何需要布尔表达式的构造中编写它,例如if
and while
。
if ( cin >> data )
{
//this block will execute only if the data was successfully read
}
相似地,
while ( cin >> data )
{
//this block will execute only if the data was successfully read
//and the loop will continue until read attempt fails.
}
cin >> input_var
提示用户输入保存在input_var
. 如果接收到的输入不是整数,那么它会进入 if 条件。“考虑到变量是一个int。”
在 iostream 的上下文中,作者通常将 << 和 >> 分别称为“put-to”或“流插入”和“get-from”或“流提取”运算符。
如果在操作数之间使用 >> 表示其按位右移
>>
运算符根据上下文有两种含义。
当使用整数时,它可以是右移运算符:1024 >> 3
执行位移。
在您的情况下,您会认为它是“提取运算符”。从 中提取时cin
,程序从标准输入(通常是键盘)读取并尝试将其格式化为适合右侧的内容。由于您正在读取整数,因此它将执行以下步骤:
+
或-
作为一个积极或消极的符号如果 if 可以读取某些内容并生成一个整数,则该过程最终会返回评估为 true 的内容,因此该行:
if(!(cin >> input_var))
Checks to see if the conversion succeeded. If it couldn't read a number, say you entered fred
instead, the process would return something that evaluates to false, since the conversion failed. The value returned is actually cin
, which is convertible to bool
, but that's a little down in the weeds.
这是一个重载的运算符。
对于输入,提取运算符为cin>>value;
用于按位右移value>>2;
它是一个运算符。行为取决于 input_var。看看这里:MSDN。