输入的数字与代码显示的不同,为什么在结构中使用数组,为什么?

问题描述 投票:0回答:1

我正在编写一个代码,用户可以在其中键入数字,这些数字将存储在结构内部的数组中。但是,有时,我输入的值与存储/显示的值不同。这个问题不是很一致。例如,当我输入10时,它可能显示为:63846446382852或实际上是10。我对此感到非常困惑,我尝试使用int,long和double更改数组数据类型,但无济于事。

#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;

}

c++ arrays xcode struct cin
1个回答
0
投票

您的代码的更正版本为:

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.