什么>>用c ++做

时间:2012-12-18 16:46:21

标签: c++

我正在阅读关于c ++的谷歌大学部分,我不确定这段代码是做什么的:

if (!(cin >> input_var)) {

    cout << "you entered a non-numeric. Exiting..." << endl;
    break;

}

if语句中的语句实际上在这里做了什么?

谢谢!

8 个答案:

答案 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&,在ifwhile中使用时,可以自动转换为truefalse,具体取决于流读取是否成功。所以你可以在需要布尔表达式的任何构造中编写它,例如ifwhile

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