读取文本文件中的多行并写入另一个文本文件

Read multiple line in text file and write in another text file

这是我的scores.txt文件

7 2 11 4
9 1 30 3
5 3 20 3
10 1 10 2
5 0 50 0

这是 5 局板球比赛的详细信息

上述详细信息的结构:

在文本文件中,第一列代表 7 轮、2 轮、11 轮、4 轮。

我想在文本文件中获取五个投球手(数一数列),并在终端中获取该投球手的平均值(第三列值除以第四列)和 print/display。

如下所示:

Bowler    Average
1         2.75
2         10
3         6.66
4         5
5         NA
6         NA

上面的文件有六个保龄球,但最后一个是 repeated.I 因为 scores.txt 文件有五行,所以只尝试将其修复五次。

这是我的代码

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
using std::setw;

int main(){
    float avg;
    int over,maiden,runs,wickets;
    ifstream scores;
    scores.open("scores.txt");
    if(!scores){
        cout<<"Error \n";
        return -1;
    }

    ofstream average("average.txt");
    if(!average){
        cout<<"Error \n";
        return -1;
    }

    average << "Bowler"<<"\t"<<"Average"<<endl;
    int i=1;
    //scores >> over >> maiden >> runs >> wickets;
    while(!scores.eof()){
        scores >> over >> maiden >> runs >> wickets;
        avg = runs/float(wickets);
        if(wickets == 0){
            average<<i<<"\t"<<"NA"<<endl;
        }else{
            //avg = runs/float(wickets);
            average << i<<"\t"<<avg<<endl;

        }
        i++;
    }
    scores.close();
    average.close();
    return 0;
}

我认为你的问题是这一行

while(!scores.eof()){

当你读完最后一行时,scores.eof()false,你尝试再读一行,读取失败(并且scores.eof()变成true),您不测试读数是否有误,而是使用最后一行值的两倍。

我建议类似

while( scores >> over >> maiden >> runs >> wickets ){
    avg = runs/float(wickets);