Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-函数在试图忽略同一行时读取该行两次_C++_Ifstream_Ignore - Fatal编程技术网

C++ C++;-函数在试图忽略同一行时读取该行两次

C++ C++;-函数在试图忽略同一行时读取该行两次,c++,ifstream,ignore,C++,Ifstream,Ignore,我必须创建一个复杂的程序,从一个文件中读取3个值,计算平均值,并将其输出到一个文件中,所有这些都使用不同的函数,并且从一个文件中获取输入的函数需要分别调用3次,而不需要任何复杂的东西。我每次将一个变量递增1,然后输入并相应地跳过行。当使用ignore()直到换行符时,似乎可以很好地获得前2个输入,但当使用它两次跳过前2个输入并获得第3个输入时,似乎再次获得第二个输入并使用它来计算平均值。例如,我得到的5,7和10的平均值是6.3~,而它应该是7.3~。 使用两次换行符之前忽略是否有问题?我已经包

我必须创建一个复杂的程序,从一个文件中读取3个值,计算平均值,并将其输出到一个文件中,所有这些都使用不同的函数,并且从一个文件中获取输入的函数需要分别调用3次,而不需要任何复杂的东西。我每次将一个变量递增1,然后输入并相应地跳过行。当使用ignore()直到换行符时,似乎可以很好地获得前2个输入,但当使用它两次跳过前2个输入并获得第3个输入时,似乎再次获得第二个输入并使用它来计算平均值。例如,我得到的5,7和10的平均值是6.3~,而它应该是7.3~。 使用两次换行符之前忽略是否有问题?我已经包含了来自main和两个相关函数的代码

int main() {

    double input_1, input_2, input_3;
    double average;
    int count = 1;

    ifstream infile;
    ofstream outfile;
    infile.open("infile.txt");
    outfile.open("outfile.txt");

    input_1 = get_input(infile, count);
    count = count+1;

    input_2 = get_input(infile, count);
    count=count+1;

    input_3 = get_input(infile, count);

    average = calculate_avg(input_1, input_2, input_3);

    output_to_file(average, outfile);

    infile.close();
    outfile.close();

    return 0;
}



写入函数get_输入为:

double get_input(ifstream& infile,  int number) {
    double input_value;
    infile >> input_value;
    infile.ignore (1, '\n');
    return input_value;
}

因为您打开了文件,然后顺次读取了它,所以在读取数字后-内部指针位于\n symbol,并且您不必跳过几行,只需跳过
\n
symbol

std::fstream::ignore
即可从输入流中提取并丢弃字符,所以100不是最好的选择

get_input()
中使用以下命令,以“避免花哨的东西”


请不要在这里的代码示例中添加标签!这次编辑…非常感谢!我没有意识到它只会返回上次读取的值,我认为这会导致某种错误。我想我应该多测试一下。
double calculate_avg(double val_1, double val_2, double val_3){
    double avg;

    avg = (val_1 + val_2 + val_3)/3;

    return avg;
}
double get_input(ifstream& infile,  int number) {
    double input_value;
    infile >> input_value;
    infile.ignore (1, '\n');
    return input_value;
}
infile.seekg(0); // rewind
if (number == 1) {
    infile >> input_value;
}
else if (number == 2)
{
    infile >> input_value;
    infile >> input_value;
}
else if (number == 3)
{
    infile >> input_value;
    infile >> input_value;
    infile >> input_value;
}
return input_value; //only the last read value