读取文本文件中的多行并写入另一个文本文件
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);
这是我的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);