我是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中的参数太少
答案 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')。
_