вывести человека с самым большим возрастом из массива людей

#include <iostream>
#include <ctime>
using namespace std;

const char* sexVar = "mf0";

class Person {
private:
    int age;
    char sex;
public:
    Person() {}
    Person(int, char);
    ~Person() {}

    void setAge(int);
    int getAge() const;

    void setSex(char);
    char getSex() const;

    int rand_age();
    int rand_sex();


    bool operator==(const Person&);
    bool operator!=(const Person&);
    bool operator>(const Person&);
    bool operator<=(const Person&);

    friend ostream& operator << (ostream&, const Person&);
    friend istream& operator >> (istream&, Person& p);
};


Person::Person(int age, char sex) {
    setAge(age);
    setSex(sex);
}

void Person::setAge(int age) {
    if (age >= 0)
        this->age = age;
    else
        this->age = -age;
}

int Person::getAge()const {
    return this->age;
}

void Person::setSex(char sex) {
    bool keyFinding = false;
    for (int i = 0; i < strlen(sexVar); i++) {
        if (sex == sexVar[i]) {
            keyFinding = true;
            break;
        }
    }

    if (keyFinding)
        this->sex = sex;
    else {
        cerr << "sex type error " << endl;
    }
}

char Person::getSex()const {
    return this->sex;
}

int Person::rand_age()
{
    age = rand() % 100;
    return age;
}

int Person::rand_sex()
{
    int i = rand() % 3;
    sex = sexVar[i];
    return sex;
}


bool Person::operator==(const Person& p2) {
    if (this->age == p2.age && this->sex == p2.sex)
        return true;
    else
        return false;
}

bool Person::operator!=(const Person& p2) {
    if (this->age != p2.age || this->sex != p2.sex)
        return true;
    else
        return false;
}


bool Person::operator>(const Person& p2) {
    if (this->age > p2.age && this->sex > p2.sex)
        return true;
    else
        return false;
}

bool Person::operator<=(const Person& p2) {
    if (this->age <= p2.age && this->sex <= p2.sex)
        return true;
    else
        return false;
}


ostream& operator << (ostream& out, const Person& p) {
    out << "Age: " << p.age << endl;
    out << "Sex: " << p.sex << endl;

    return out;
}

istream& operator >> (istream& in, Person& p)
{
    cout << "Enter age:";
    in >> p.age;

    cout << "Enter sex (m/f/0):";
    in >> p.sex;

    in.ignore();

    return in;
}



int main()
{
    srand(time(nullptr));

    //Person A(133, 'f'), B(133, 'f'), C(5, '0');
    //cout << A << endl << B << endl << C << "\n\n";

    //cout << "A > B: " << (A > B) << endl;
    //cout << "A <= B: " << (A <= B) << endl;
    //cout << "A == B: " << (A == B) << endl;
    //cout << "A != B: " << (A != B) << endl;
    //cout << "A != C: " << (A != C) << endl;

    Person mass[5];
    for (int i = 0; i < 5; i++)
    {
        mass[i].rand_age();
        mass[i].rand_sex();
        cout<<"#"<<i << mass[i];
        cout << "__________\n";
    }

    Person max = mass[0];
    /*Person max;*/
    for (int i = 1; i < 5; i++)
    {
        if (mass[i].rand_age() > max.rand_age())
        {
            max = mass[i].rand_age();
            
        }
    }
    cout<<"max: " << max << endl;
    


    
}

Что-то не то выводит. Что нужно исправить?


Ответы (1 шт):

Автор решения: Eoan Ermine

Во-первых, вам нужно подключить заголовочный файл <cstring>, так как вы используете функцию strlen, объявленную в нем.

Далее вам необходимо изменить строку, генерирующие новые псевдослучайные возраста и сравнивающую их

if (mass[i].rand_age() > max.rand_age())

на следующую, сравнивающую ранее уже присвоенные возраста, что вам и надо:

if (mass[i].getAge() > max.getAge())

А также строку, где вы присваиваете переменной max типа Person псевдослучайно сгенерированный возраст типа int:

max = mass[i].rand_age();

На следующую, где как по логике и должно быть, переменной max присваивается человек с максимальным возрастом:

max = mass[i];
→ Ссылка