2016-04-13 3 views
-3

Я пишу программу, которая вычисляет средние значения ватин для определенного пользователем количества игроков. Программа отображает имя игрока, их количество раз в летучей мыши, количество обращений и средний уровень ватин. Наконец, он отображает общее количество раз, когда игроки находились на летучей мыши, общее количество попаданий и общее среднее значение. По какой-то причине функции, которые вычисляют средний средний и средний средний игрок, возвращают 0. Это, вероятно, что-то маленькое, но я в тупике, как его исправить.C++ Средняя функция вычисления Возврат 0

//Batting Average Calculator 

#include <iostream> 
#include <string> 
#include <iomanip> 
using namespace std; 

//Create Structure 
struct Record 
{ 
    string name; 
    int AB; 
    int hit; 
    double avg; 
}; 


int getSize(int); 
void getData(Record[], int); 
int calculateTotalAB(Record[], int, int); 
int calculateTotalHit(Record[], int, int); 
double calculateTotalAvg(Record[], int, double); 
void calculateAvg(Record[], int); 
void display(Record[], int, int , int, double); 


int main() 
{ 
    const int MaxSize = 50; 
    Record players[MaxSize]; 

    int size = 0; 
    int totalAB = 0; 
    int totalHit = 0; 
    double totalAvg = 0; 

    size = getSize(size); 
    getData(players, size); 
    totalAB = calculateTotalAB(players, size, totalAB); 
    totalHit = calculateTotalHit(players, size, totalHit); 
    calculateAvg(players,size); 
    totalAvg = calculateTotalAvg(players, size, totalAvg); 
    display(players, size, totalHit, totalAB, totalAvg); 
} 

//get number of players to be calculated 
int getSize(int size) 
{ 
    cout << "Please enter the number of players on the team: "; 
    cin >> size; 
    return size; 
} 

//get Player name, AB, and hit 
void getData(Record players[], int size) 
{ 
    string dummy; 
    getline(cin, dummy); 
    for (int i = 0; i < size; i++) 
    { 
     cout << "Please input the name of student " << i + 1 << ": "; 
     getline(cin, players[i].name); 
     cout << "Please input the number of times "<< players[i].name << " was at bat: "; 
     cin >> players[i].AB; 
     cout << "Please input the number of hits for " << players[i].name << ": "; 
     cin >> players[i].hit; 
     cout << " " << endl; 
     getline(cin, dummy); 
    } 
} 

int calculateTotalAB(Record players[], int size, int totalAB) 
{ 

    for (int i = 0; i < size; i++) 
    { 
     totalAB = totalAB + players[i].AB; 
    } 
    return totalAB; 
} 

int calculateTotalHit(Record players[], int size, int totalHit) 
{ 

    for (int i = 0; i < size; i++) 
    { 
     totalHit = totalHit + players[i].hit; 
    } 
    return totalHit; 
} 

void calculateAvg(Record players[], int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     players[i].avg = players[i].hit/players[i].AB; 
    } 
} 

double calculateTotalAvg(Record players[], int size, double totalAvg) 
{ 
    double j = 0; 
    for (int i = 0; i < size; i++) 
    { 
     j = j + players[i].avg; 
    } 
    totalAvg = j/size; 
    return totalAvg; 
} 

void display(Record players[], int size, int totalHit, int totalAB, double totalAvg) 
{ 
    cout << fixed << showpoint << setprecision(3); 
    cout << "Player  AB   Hit   Avg" << endl; 
    cout << " " << endl; 
    for (int i = 0; i < size; i++) 
    { 
     cout << players[i].name << setw(8) << players[i].AB << setw(5) << players[i].hit << setw(5) << players[i].avg; 
    } 
    cout << " " << endl; 
    cout << "Totals  " << totalAB << "  " << totalHit << "  " << totalAvg << endl; 
} 
+0

http://stackoverflow.com/help/mcve –

+0

пытается разделить 1 на 3, используя только целое число номера на бумаге, и вы увидите, в чем проблема. Кстати, ты действительно написал весь этот код, не тестировав его? – user463035818

+0

Нет, я этого не делал, я все еще довольно новичок в C++. Каков наилучший способ проверить функции, как я их пишу? Должен ли я просто создавать отдельные проекты, состоящие из функций, и использовать фиктивные значения для их проверки? Любой совет будет принят во внимание. – Hampton

ответ

2

Вы делением int с помощью int, который рассчитывается как int, и хранить его в double. То, что вы должны сделать, это явно бросить хотя бы один из ваших int значений двойного первым, как это:

void calculateAvg(Record players[], int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     players[i].avg = players[i].hit/(double) players[i].AB; 
    } 
} 
Смежные вопросы