getline()函数的问题

时间:2010-10-14 15:16:05

标签: c++ getline

我是C ++的初学者,我第一次尝试使用getline()函数。 当我编写这段代码时,出现了2个错误。

这段代码应该做什么? 它应该从read.txt读取4个数字然后计算它以找到平均值并在output.txt中写入输出。

4个数字(在read.txt中)都在不同的行上,如下所示:

6
12
15
19

以下是代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

    int main () 
    {
     ifstream readFile;
        ofstream sendFile;
     readFile.open ("read.txt");
     sendFile.open ("output.txt");;

     float mean;
     int num, num2, num3, num4;
     getline(readFile, num), getline(readFile, num2), getline(readFile, num3), getline(readFile, num4); 

     readFile >> num >> num2 >> num3 >> num4;
     sendFile << "1. The mean of " << num << ", " << num2 << ", " << num3 << ", and " << num4 << "is " << (num + num2 + num3 + num4) / 4;

     readFile.close();
     sendFile.close();

      system ("PAUSE") ;
      return 0;
    }

以下是错误: IntelliSense:没有重载函数“getline”的实例与参数列表20匹配 IntelliSense:函数调用20中的参数太少

3 个答案:

答案 0 :(得分:1)

std::getline()有两个参数:一个流和要读取下一行的std::string对象(以及一个可选的第三个参数,分隔符)。您传递的是int而不是std::string

您应该使用普通的格式化提取:

if (readFile >> num >> num2 >> num3 >> num4) {
    // extraction succeeded!
}
else {
    // extraction failed; handle the error here
}

答案 1 :(得分:0)

getline读入std :: string,无法读入int s。只需使用您已有的readFile >> num >> num2 >> num3 >> num4;,然后使用getline s删除该行。

另一方面,您不需要在此处显式关闭文件,因为文件流对象的析构函数将为您处理。

答案 2 :(得分:0)

std :: getline是一个非常有用的工具,用于读取单行文本或读取特定字符的文本,并将其写入std :: string,然后可以进一步读取。默认情况下,它使用换行符,即'\ n'作为分隔符,但您可以更改它。

关于使用流读取多个整数然后输出它们的均值,为什么不只是读到文件的末尾,因此:

int count = 0, total = 0, num;
while( instr >> num )
{
  ++count;
  total += num;
}

float mean = (count > 0 ) ? total / num : std::numeric_limits<float>::quiet_NaN();
outstr << mean;

你可以把它作为一个功能,采取istream&amp; instr和ostream&amp; outstr

现在假设我们要更改它以读取多行,每行包含由空格或制表符分隔的数字。在我们的输出中,我们在自己的行上写下所有的方法。

现在做这样的事情:

std::string line;
while( std::getline( bigInStr, line ) )
{
   std::istringstream iss(line);
   outputMean( iss, outstr );
   outstr << '\n';
}

虽然您可能不想实际输出NaN但只是在输出中将该行留空。计算均值的函数可能希望使用NaN作为返回值,如果它必须返回浮点数。如果我们想要迭代的话,我们可以同时计算方差,偏度和峰度。

然后你会在线上输出多个值,你必须选择自己的分隔符。我自己的偏好是在这种情况下使用tab('\ t')。

_