C++ - 函数在尝试忽略同一行时读取同一行两次
C++ - function reads the same line twice when trying to ignore it
我必须创建一个复杂的程序来从文件中读取 3 个值,计算平均值,然后将其输出到文件中,所有这些都使用不同的函数,并且从文件中获取输入的函数需要单独调用 3 次,没有花哨的东西。我每次将变量递增 1,并相应地输入并跳过行。 使用 ignore() 直到换行符时,它似乎可以很好地获得前 2 个输入,但是当使用它两次跳过前 2 个输入并获取第三个输入时,它似乎再次获得第二个输入并使用它来计算平均值。例如,我得到 5,7 和 10 的平均值为 6.3~,而它应该是 7.3~。我两次使用忽略直到换行符做错了什么吗?我已经包含了我的主函数和两个相关函数的代码。
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
将函数get_input写为:
double get_input(ifstream& infile, int number) {
double input_value;
infile >> input_value;
infile.ignore (1, 'n');
return input_value;
}
将起作用,因为您打开了文件,然后依次读取它,因此在读取数字 - 内部指针位于符号之后,您不必跳过几行,只需跳过n
符号
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 而(!inputfile.eof())只读取第一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文件中的一行读取特定数据-C++
- 使用std::getline()读取一行
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 从文件读取并在一行中写入 cout
- 将 ifstream 文件和每一行读取到数组中
- 从文件 c++ 中的下一行读取
- 在同一行读取具有多个类型的文件
- 写入终端并从同一行读取
- 如何在c++中从最后一行读取文本文件
- 逐行读取数组,每一行读取3个值
- 在同一行读取字符串和整数
- 从一行读取hh:mm格式的时间