Search code examples
c++arraysxcodestructcin

Number that is inputted is not the same as displayed by the code, using array in a struct, why?


I'm making a code where users can type in numbers that will be stored in an array which is inside a struct. However, sometimes, the value that I input is not the same as the one that is stored/display. This problem is not very consistent. For example, when I input 10, it could either be shown as: 6384644, 6382852, or actually 10. I am very confused for this, I've tried changing the array data type using int, long, and double, but to no avail.

#include <iostream>
#include <iomanip>

using namespace std;

int main () {
int n,x,totalAge = 0,maxAge = 0,avgAge = 0,maxGoals = 0,bestPlayer = 0, oldest = 0;

cout << "Input the number of players: ";
cin >> n;

cout << "Input the number of games: ";
cin >> x;

struct players {
    string name;
    string currTeam;
    int shirtn;
    int age;
    float height;
    float weight;
    int totalGoals;
    long goals[];
};

players goals[x];

players playerList[n];

for (int i = 0; i < n; i++) {
    cout << "Player " << (i+1) << endl;
    cout << "Input player's name: ";
    cin.ignore();
    getline (cin, playerList[i].name);
    cout << "Input player's current team: ";
    getline (cin, playerList[i].currTeam);
    cout << "Input player's shirt number: ";
    cin >> playerList[i].shirtn;
    cout << "Input player's age: ";
    cin >> playerList[i].age;
    cout << "Input player's height (m): ";
    cin >> playerList[i].height;
    cout << "Input player's weight (kg): ";
    cin >> playerList[i].weight;

    cout << endl;

    for (int a = 0; a < x; a++) {
        playerList[i].goals[a] = 0;
        playerList[i].totalGoals = 0;
    }

    for (int a = 0; a < x; a++) {
        cout << "Game " << (a+1) << "'s number of goals: ";
        cin >> playerList[i].goals[a];
        playerList[i].totalGoals += playerList[i].goals[a];
    }

    if (playerList[i].totalGoals > maxGoals) {
        maxGoals = playerList[i].totalGoals;
        bestPlayer = i;
    }

    if (playerList[i].age > maxAge) {
        maxAge = playerList[i].age;
        oldest = i;
    }

    totalAge += playerList[i].age;
    cout << endl;
}

cout << endl;

for (int i = 0; i < n; i++) {
    cout << playerList[i].name << endl;
    cout << "--------------------" << endl;
    cout << "Current team: " << playerList[i].currTeam << endl;
    cout << "Shirt Number: " << playerList[i].shirtn << endl;
    cout << "Age: " << playerList[i].age << endl;
    cout << "Height: " << playerList[i].height << " m" << endl;
    cout << "Weight: " << playerList[i].weight << " kg" << endl;

    cout << endl;

    for (int a = 0; a < x; a++) {
        cout << "Game " << (a+1) << "'s number of goals: " << playerList[i].goals[a] << endl;
    }

    cout << endl << endl;
}

avgAge = totalAge / n;

cout << "Average age of players: " << avgAge << endl;
cout << "Oldest Player: " << playerList[oldest].name << " (" << maxAge << ") ";
cout << "Player who got the most goals: " << playerList[bestPlayer].name << ", shirt number: " << playerList[bestPlayer].shirtn << ". With total goals of: " << playerList[bestPlayer].totalGoals << endl;

}


Solution

  • Your code's corrected version would be this:

    #include<string>
    #include<iostream>
    #include<vector>    //for vector
    using namespace std;
    
    struct players {
        string name;
        string currTeam;
        int shirtn;
        int age;
        float height;
        float weight;
        int totalGoals;
        vector<long> goals;    //used vector instead of array
    };
    
    int main () {
        int N, X;
        int totalAge = 0, maxAge = 0, avgAge = 0, maxGoals = 0, bestPlayer = 0, oldest = 0;
    
        cout << "Input the number of players: ";
        cin >> N;
    
        cout << "Input the number of games: ";
        cin >> X;
    
        players player[X];
    
        for (int i = 0; i < N; i++) {
            cout << "Player " << (i+1) << endl;
            cout << "Input player's name: ";
            cin>>player[i].name;
            cout << "Input player's current team: ";
            cin>>player[i].currTeam;
            cout << "Input player's shirt number: ";
            cin >> player[i].shirtn;
            cout << "Input player's age: ";
            cin >> player[i].age;
            cout << "Input player's height (m): ";
            cin >> player[i].height;
            cout << "Input player's weight (kg): ";
            cin >> player[i].weight;
    
            cout << endl;
    
            player[i].totalGoals = 0;
            for (int a = 0; a < X; a++) {
                long G;
                cout << "Game " << (a+1) << "'s number of goals: ";
                cin >> G;
                player[i].goals.push_back(G);
                player[i].totalGoals += G;
            }
    
            if (player[i].totalGoals > maxGoals) {
                maxGoals = player[i].totalGoals;
                bestPlayer = i;
            }
    
            if (player[i].age > maxAge) {
                maxAge = player[i].age;
                oldest = i;
            }
    
            totalAge += player[i].age;
            cout << endl;
        }
    
        cout << endl;
    
        for (int i = 0; i < N; i++) {
            cout << player[i].name << endl;
            cout << "--------------------" << endl;
            cout << "Current team: " << player[i].currTeam << endl;
            cout << "Shirt Number: " << player[i].shirtn << endl;
            cout << "Age: " << player[i].age << endl;
            cout << "Height: " << player[i].height << " m" << endl;
            cout << "Weight: " << player[i].weight << " kg" << endl;
    
            cout << endl;
    
            for (int a = 0; a < X; a++) {
                cout << "Game " << (a+1) << "'s number of goals: " << player[i].goals[a] << endl;
            }
    
            cout << endl << endl;
        }
    
        avgAge = totalAge / N;
    
        cout << "Average age of players: " << avgAge << endl;
        cout << "Oldest Player: " << player[oldest].name << " (" << maxAge << ") ";
        cout << "Player who got the most goals: " << player[bestPlayer].name << ", shirt number: " << player[bestPlayer].shirtn << ". With total goals of: " << player[bestPlayer].totalGoals << endl;
        return 0;
    }