2016-04-13 10 views
-3

私は、ユーザー定義のプレーヤー数の打撃平均を計算するプログラムを作成しています。プログラムは、プレーヤーの名前、バットでの回数、ヒット数、および打率を表示します。最後に、プレイヤーの総数、ヒット数、全体平均を表示します。何らかの理由で、個々のプレーヤー平均と全体平均を計算する関数は0を返しています。これはおそらく小さなものですが、試して修正する方法がわかりません。C++平均計算関数0返信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

整数のみを使用して3で1を分割してみてください紙の番号とあなたは問題が何かを見るでしょう。あなたは本当にこのコードをテストせずにこのコードをすべて書きましたか? – 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; 
    } 
}