C++中>>运算符的说明

Explanation of >> operator in C++

本文关键字:gt 说明 运算符 C++      更新时间:2023-10-16

我编辑了一段代码,旨在从.txt文件中读取整数并使用cout显示它们。它旨在显示第一个整数后跟逗号,然后是运行总平均值,当.txt中有空行或 singke 整数时,问题出在哪里。建议我将代码更改为:

  using namespace std;
  # include <iostream>
  #include <fstream>
  #include<string>
int main ()
{
double y = 0,x = 0,value1 =0;
string myFileName,myString;
cout<< "please enter the name of the file you wish to open"<<"n";
cin>>myFileName;
ifstream inFile;
inFile.open(myFileName.c_str());
while (!inFile.eof())
{
    double currentAv;
    //while(getline(inFile,myString,(' ')))
    while(inFile>>value1)
    {

        y=y+1;
        //value1 = atof(myString.c_str());
        currentAv=(value1+x)/y;
        cout<<value1<<","<<currentAv<<endl;
        x=value1+x;
    }
}


inFile.close();
system("pause");
}

去掉了带有//的 2 行,while 循环更改为:

while(inFile>>value1)

问题是我需要了解新代码与旧代码的不同之处。 有人可以帮忙吗?我知道它会转移位,但我不明白为什么会起作用。代码确实有效。

让我们一步一步地看看发生了什么。

inFile>>value1

这将调用 istream::operator>>,它从流中读取double并返回对流对象的引用,即inFile本身。

while(inFile>>value1)

while语句的条件必须可转换为 bool 。现在我们知道inFile>>value1的类型是std::istream&的,并且确实存在istream::operator bool,如果没有设置错误标志,则返回true(这意味着上次读取操作不成功)。

因此,while(inFile>>value1)的整体含义是:在您可以做的时候阅读inFile value1

关于与getlineatof相比的差异.首先,>>读取直到任何空格字符,而不仅仅是代码中的空格。其次,它将在无效输入时失败。第三,它只是更惯用。