我正在阅读关于c ++的谷歌大学部分,我不确定这段代码是做什么的:
if (!(cin >> input_var)) {
cout << "you entered a non-numeric. Exiting..." << endl;
break;
}
if语句中的语句实际上在这里做了什么?
谢谢!
答案 0 :(得分:7)
这是非常基本的C ++。通常,>>
和<<
用于位移。但是,I / O流库已为流重载operator>>
和operator<<
,因此它们可分别用于提取和插入。为什么?因为操作符看起来像两个具有一定方向性的箭头,因此代码读取得很好 - 数据正朝着那个方向移动。
因此,在您的示例中,cin
是标准输入流,您将从该流中提取一个整数到变量input_var
。您从标准输入中读取cin >> input_var
为“提取input_var
”。
同样,在if
语句的正文中,您将插入标准输出流cout
。
operator<<
和operator>>
的I / O重载会返回对您要从中提取或插入的流的引用。此流可转换为bool
,以便您检查其状态。也就是说,执行if (cin)
将检查cin
流的状态是否正常。在您的情况下,我们使用“not”运算符!
来检查流 是否正常。如果不是,我们输出错误。
值得一提的是!(cin >> input_var)
语句中的if
本身并不是一个语句 - 它是一个表达式。
答案 1 :(得分:3)
它会读取int
(变量input_var
)并通过!(cin >> ...)
部分检查读取是否成功(istream
重载operator !
)
答案 2 :(得分:2)
if ( !(cin >> input_var) )
此处>>
是为std::istream&
重载的运算符,并根据input_var
的类型调用特定的重载,该重载从流中读取数据并存储在input_var
中。运算符重载返回类型为std::istream&
,这意味着表达式cin >> input_var
的类型为std::istream&
,在if
或while
中使用时,可以自动转换为true
或false
,具体取决于流读取是否成功。所以你可以在需要布尔表达式的任何构造中编写它,例如if
和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.
}
答案 3 :(得分:2)
cin >> input_var
提示用户输入保存在input_var
中的输入。如果接收的输入不是整数,则它进入if条件。
“考虑到变量是一个int。”
答案 4 :(得分:1)
在iostreams的上下文中,作者经常会引用&lt;&lt;和&gt;&gt;分别作为“put-to”或“stream insertion”和“get-from”或“stream extraction”运算符。
如果您使用&gt;&gt;操作数之间意味着它的按位右移
答案 5 :(得分:1)
>>
运算符具有两种含义,具体取决于上下文。
当使用整数时,它可以是右移运算符:1024 >> 3
执行位移。
在您的情况下,您会将其视为“提取运算符”。从cin
中提取时,程序从标准输入(通常是键盘)读取并尝试将其格式化为适合右侧的内容。由于您正在读取整数,因此它将执行以下步骤:
+
或-
为正号或负号如果if能读取某个东西并生成一个整数,那么该过程最终会返回一个评估为true的东西,所以行:
if(!(cin >> input_var))
检查转换是否成功。如果它无法读取数字,例如您输入fred
,则该过程将返回评估为false的内容,因为转换失败。返回的值实际上是cin
,可以转换为bool
,但杂草中有点下降。
答案 6 :(得分:0)
这是一个重载的运算符。
用于输入,提取运算符为cin>>value;
用于按位右移value>>2;
答案 7 :(得分:0)
这是一个运营商。行为取决于input_var。看看这里:MSDN。