C++ - 函数在尝试忽略同一行时读取它两次

标签 c++ ifstream

我必须创建一个复杂的程序来从文件中读取3个值,计算平均值,并将其输出到文件中,所有这些都使用不同的函数,并且从文件获取输入的函数需要调用3次分开,没有花哨的东西。我每次将变量加 1,并获取输入并相应地跳过行。使用ignore()直到换行符之前似乎可以很好地获得前2个输入,但是当使用它两次跳过前2个输入并获得第三个输入时,它似乎再次获得第二个输入并使用它来计算平均的。例如,我得到的 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;
}

double get_input(ifstream& infile,  int number) {

    double input_value;

    if (number == 1) {
        infile >> input_value;
    }
    else if (number == 2)
    {
        infile.ignore (100, '\n');
        infile >> input_value;
    }
    else if (number == 3)
    {
        infile.ignore (100, '\n');
        infile.ignore (100, '\n');
        infile >> input_value;
    }
    return input_value;
}

double calculate_avg(double val_1, double val_2, double val_3){
    double avg;

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

    return avg;
}

最佳答案

std::fstream::ignore 将从输入流中提取并丢弃字符,因此 100 不是最佳选择

get_input()中使用以下内容是为了“没有花哨的东西”

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

关于C++ - 函数在尝试忽略同一行时读取它两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501726/

相关文章:

C++:允许访问 protected 类成员而不是私有(private)成员

c++ - 我是否必须在 Xcode iOS 项目中释放 C 分配的内存?

c++ - 使用 cmake : how could I write a test to verify that a class is abstract?

c++ - 访问冲突写入位置

c++ - 如何使用 ifstream 从文件中正确读取无符号整型变量?

c++ - 如何在 C++ 中使用不同的 ifstream 模式?

c++ - C++中这个星号(*)是什么意思? -- 指向成员的指针

c++ - printf中的C语言计算

c++ - 为什么这段代码没有用文件流切换 cin 和 cout?

c++ - 在 C++ 中读取最后一行