1

I posted earlier for the first time and was able to almost complete this assignment. The program isn't giving an error, but I'm getting undesired results. The output appears to be outputting the array address instead of the data I input. Or at least I think it is based on my very very limited knowledge. Can anyone help guide me in how to fix this? I've been working on this all day and at this hour, I think I'm ready to throw in the towel. Any advice is greatly appreciated, thanks!

// Amanda 
// SoccerPlayer.cpp : main project file.
// October 6, 2012
/* a. Design a SoccerPlayer class that includes three integer fields: a player's jersey     number,
number of goals, and number of assists. Overload extraction and insertion operators for    the class.
b. Include an operation>() function for the class. One SoccerPlayer is considered greater
than another if the sum of goals plus assists is greater.
c. Create an array of 11 SoccerPlayers, then use the > operator to find the player who  has the
greatest goals plus assists.*/

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
using namespace std;



class SoccerPlayer
{
    friend std::ostream& operator<<(std::ostream&, const SoccerPlayer&);
    friend istream& operator>>(istream&, SoccerPlayer&);
private:
    int jerseyNum;
    int numGoals;
    int numAssists;
public:
    SoccerPlayer(int, int, int);
    int score;
    int operator>(SoccerPlayer&);
    void DisplayStar();

};

SoccerPlayer::SoccerPlayer(int jersey = 0, int goal = 0, int assist = 0)
{
    jerseyNum = jersey;
    numGoals = goal;
    numAssists = assist;
} 

void SoccerPlayer::DisplayStar()
{
    cout<<"Player Number: "<< jerseyNum <<endl;
    cout<<"Goals Scored:  "<< numGoals <<endl;
    cout<<"Assists Made:  "<< numAssists <<endl;
} 

std::ostream& operator<<(std::ostream& player,  const SoccerPlayer& aPlayer)
{
    player << "Jersey #" << aPlayer.jerseyNum <<
        " Number of Goals " << aPlayer.numGoals << 
        " Number of Assists " << aPlayer.numAssists;
    return player;
}

std::istream& operator>>(std::istream& inPlayer, SoccerPlayer& aPlayer)
{

    cout << "Please enter the jersey number: ";
    inPlayer >> aPlayer.jerseyNum;
    cout << "Please enter the number of goals: ";
    inPlayer >> aPlayer.numGoals;
    cout << "Please enter the number of assists: ";
    inPlayer >> aPlayer.numAssists;

    aPlayer.score=(aPlayer.numGoals) + (aPlayer.numAssists);



    return inPlayer;
}

int SoccerPlayer::operator>(SoccerPlayer& aPlayer)
{

    int total = 0;
    if (score > aPlayer.score)
        total = 1;
    return total;


}

int main()
{
const int sz = 11;
int x;

SoccerPlayer aPlayer[sz];

for(x = 0; x < sz; ++x)
cin >> aPlayer[x];

{
 double max = aPlayer[x].score; 
 for(int i = 1; i<sz; ++i)
 {
     if(aPlayer[i] > aPlayer[x])
     {
         max=aPlayer[i].score;
     }

  }
 cout << max << endl;
 cout << aPlayer[x];
}
    _getch();
    return 0;
}
4

3 回答 3

2

看起来好像您打算在这里循环,但它的格式不正确:

for(x = 0; x < sz; ++x)
cin >> aPlayer[x];

{
 double max = aPlayer[x].score; 
 for(int i = 1; i<sz; ++i)
 {
     if(aPlayer[i] > aPlayer[x])
     {
         max=aPlayer[i].score;
     }

  }
 cout << max << endl;
 cout << aPlayer[x];
}

您的意思是(我认为)double max ...应该在循环内,但该行在cin >> ...语句之后,大括号之外。所以迭代只适用于语句;完成后,控制继续到,但 x(从 剩下的)等于,因此在数组之外,在无人区。forcin >> ...double max = aPlayer[x].score;for(...)szaPlayer[x]

cin >> ...括号放在里面。

于 2012-10-08T06:32:32.687 回答
1

问题是您只打印元素aPlayer[x]。但请注意,您的第一个 for 循环在x = 11. 好吧,那是数组末尾的一个,所以实际上,您正在输出垃圾。

我只是尝试了一下aPlayer[0],得到了预期的结果。

于 2012-10-08T06:32:41.830 回答
0

这就是我最终的结果。感谢大家的帮助!

// Amanda 
// SoccerPlayer.cpp : main project file.
// October 6, 2012
/* a. Design a SoccerPlayer class that includes three integer fields: a player's jersey number,
number of goals, and number of assists. Overload extraction and insertion operators for  the class.
b. Include an operation>() function for the class. One SoccerPlayer is considered greater
than another if the sum of goals plus assists is greater.
c. Create an array of 11 SoccerPlayers, then use the > operator to find the player who has the
greatest goals plus assists.*/

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
using namespace std;



//soccer player class - see above description
class SoccerPlayer
{
    friend std::ostream& operator<<(std::ostream&, const SoccerPlayer&);
    friend istream& operator>>(istream&, SoccerPlayer&);
private:
    int jerseyNum;
    int numGoals;
    int numAssists;
public:
    SoccerPlayer(int, int, int);
    int score;
    int operator>(SoccerPlayer&);
    void DisplayStar();

};

//soccerplayer constructor
SoccerPlayer::SoccerPlayer(int jersey = 0, int goal = 0, int assist = 0)
{
    jerseyNum = jersey;
    numGoals = goal;
    numAssists = assist;
}
//to display star player
void SoccerPlayer::DisplayStar()
{
    cout<<"Jersey #: "<< jerseyNum <<endl;
    cout<<"Goals Scored:  "<< numGoals <<endl;
    cout<<"Assists Made:  "<< numAssists <<endl;
} 

//overload operator out
std::ostream& operator<<(std::ostream& player,  const SoccerPlayer& aPlayer)
{
    player << "Jersey #" << aPlayer.jerseyNum <<
        " Number of Goals " << aPlayer.numGoals << 
        " Number of Assists " << aPlayer.numAssists;
    return player;
} 
//overload operator in
std::istream& operator>>(std::istream& inPlayer, SoccerPlayer& aPlayer)
{

    cout << "Please enter the jersey number: ";
    inPlayer >> aPlayer.jerseyNum;
    cout << "Please enter the number of goals: ";
    inPlayer >> aPlayer.numGoals;
    cout << "Please enter the number of assists: ";
    inPlayer >> aPlayer.numAssists;

    aPlayer.score=(aPlayer.numGoals) + (aPlayer.numAssists);
    return inPlayer;
} 

//overload operator greater than
int SoccerPlayer::operator>(SoccerPlayer& aPlayer)
{
    int total = 0;
    if (score > aPlayer.score)
        total = 1;
    return total;
}
//main declaration
int main()
{
    //11 players
    const int sz = 11;
    int x;
    SoccerPlayer aPlayer[sz];
    double max = 0;
    //to display star
    SoccerPlayer Star;
//allow user to input players, show what they input
for(x = 0; x < sz; ++x)
{
    cin >> aPlayer[x];
    cout << aPlayer[x] << endl << endl;
    for(int i=1; i<sz; i++)
    {
        Star=aPlayer[0];
        if(aPlayer[i] > aPlayer[i+1])

            Star=aPlayer[i];

    }
} 
//show star player
cout << "The Star Player: "<< endl;
Star.DisplayStar();
_getch();
return 0;
}
于 2012-10-09T03:01:39.103 回答