2016-04-21 2 views
0

Вот мой scores.txt файлЧитать несколько строку в текстовый файл и записать в другой текстовый файл

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

Это detais из 5 крикет матч тайма

структура выше деталей:

В текстовом файле первый столбец представляет собой 7-тактные, 2-х девичьи, 11-беговые, 4-калитки.

Я хочу получить пять боулеров (счет столбца) в текстовом файле и среднее значение (третье значение столбца делит на четвертый столбец) этих боулеров и распечатать/отобразить в терминале.

, как показано ниже:

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; 
} 
+1

Возможный дубликат [Чтение из текстового файла до EOF повторяет последнюю строку] (http://stackoverflow.com/questions/21647/reading-from-text-file-until -eof-repeatts-last-line) – Holt

+0

Моя проблема заключается в вычислении среднего значения и записи в текстовом файле в виде столбца 2. – Blasanka

ответ

1

Я думаю, ваша проблема эта линия

while(!scores.eof()){ 

Когда вы прочтете последнюю строку, scores.eof() является false, вы пытаетесь прочитать еще одну строку, чтение fail (и scores.eof() - true), вы не проверяете, есть ли чтение с ошибкой или без нее, и вы используете в два раза значения последней строки.

я предлагаю что-то вроде

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

Я могу ясно понять, спасибо. – Blasanka

Смежные вопросы