繁体   English   中英

>>在c ++中做什么

[英]what does >> do in c++

我正在通过谷歌大学部分c ++,我不知道这段代码是做什么的:

if (!(cin >> input_var)) {

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

}

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

谢谢!

这是非常基本的C ++。 通常, >><<用于位移。 但是,I / O流库已经为流重载了operator>>operator<< ,因此它们可以分别用于提取插入 为什么? 因为运算符看起来像两个具有一定方向性的箭头,因此代码读取得很好 - 数据正朝着那个方向移动。

因此,在您的示例中, cin是标准输入流,您将从该流中提取一个整数到变量input_var 您将cin >> input_var读作“从标准输入中提取input_var ”。

同样,在if语句的主体内部,您将插入标准输出流cout

operator<<operator>>的I / O重载返回对您要从中提取或插入的流的引用。 此流可转换为bool以允许您检查其状态。 也就是说, if (cin)将检查cin流的状态是否正常。 在您的情况下,我们使用“not”运算符, ! ,以检查流是不行的。 如果不是,我们输出错误。

值得一提的是if语句中的!(cin >> input_var)本身不是语句 - 它是一个表达式。

它读取一个int (变量input_var )并通过!(cin >> ...)部分检查读取是否成功( istream有一个重载的operator ! )。

if ( !(cin >> input_var) )

这里>>是一个为std::istream&重载的运算符,并根据input_var的类型input_var一个特定的重载,它从流中读取数据并存储在input_var 运算符重载返回类型是std::istream& ,这意味着表达式cin >> input_var的类型是std::istream& ,当在ifwhile使用while ,可以自动转换为truefalse具体取决于是否读取-the-stream是否成功。 所以你可以在需要布尔表达式的任何构造中编写它,例如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.
}

cin >> input_var提示用户输入保存在input_var中的input_var 如果接收的输入不是整数,则它进入if条件。 “考虑变量是一个int。”

在iostreams的上下文中,作者通常将<<和>>分别称为“put-to”或“stream insertion”和“get-from”或“stream extraction”运算符。

如果在操作数之间使用>>,则表示其按位右移

>>运算符具有两种含义,具体取决于上下文。

当使用整数时,它可以是右移运算符: 1024 >> 3执行位移。

在您的情况下,您会将其视为“提取运算符”。 当从cin提取时,程序从标准输入(通常是键盘)读取并尝试将其格式化为适合右侧的东西。 由于您正在读取整数,因此它将执行以下步骤:

  • 阅读并丢弃任何前面的空格
  • 读取并解释+-作为正号或负号
  • 读取尽可能多的数字字符以构建整数。

如果if能读取某个东西并生成一个整数,那么该过程最终会返回一个计算结果为true的东西,所以行:

if(!(cin >> input_var))

检查转换是否成功。 如果它无法读取数字,比如说您输入了fred ,则该过程将返回一些评估为false的内容,因为转换失败。 返回的值实际上是cin ,可以转换为bool ,但在杂草中有点下降。

这是一个重载的运算符。

  • 对于输入,提取运算符为cin>>value;

  • 对于按位右移位value>>2;

这是一个运营商。 行为取决于input_var。 看看这里: MSDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM