我必须创建一个复杂的程序来从文件中读取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/