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

时间:2014-12-13 21:41:48

标签: c++ operators

我编辑了一段代码,用于从.txt文件中读取整数并使用cout显示它们。它被设计为显示第一个整数,后跟逗号,然后是.txt中存在空行或整数整数的问题的运行总平均值。我被建议将代码更改为:

  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)

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

1 个答案:

答案 0 :(得分:0)

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

inFile>>value1

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

while(inFile>>value1)

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

因此,while(inFile>>value1)的整体含义是:value1inFile读取getline

atof>>相比的差异。首先,{{1}}读取直到任何空格字符,而不仅仅是代码中的空格。其次,无效输入会失败。第三,它更具惯用性。