Ошибка при проверке

такая ошибка при проверки пола в структуре(Array[i].sex).

for (int i = 0; i < size; i++)
{
    if (Array[i].SEX != "W" && Array[i].SEX != "w")
    {
        Average += Array[i].VIK;
        counter++;
    }
}

ошибка в данном цикле ,что я не так делаю ?Полный код прикладываю:

#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<iomanip>

using namespace std;

struct MISTO
{
    char* NAME;
    int VIK;
    char* SEX;
};

void FillingStruct(MISTO* Array, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << "Habitant #" << i + 1 << "\nEnter Suname: ";
        char surname[50];
        cin >> surname;
        Array[i].NAME = new char[strlen(surname) + 1];
        strcpy(Array[i].NAME, surname);

        cout << "Enter age:";
        cin >> Array[i].VIK;

        cout << "Enter gender(m/w):";
        char SEX[2];
        cin >> SEX;
        Array[i].SEX = new char[strlen(SEX) + 1];
        strcpy(Array[i].SEX, SEX);
    }
}

int AverageAgeW(MISTO* Array, int size)
{
    int counter = 0;
    int Average = 0;

    for (int i = 0; i < size; i++)
    {
        if (Array[i].SEX != "M" && Array[i].SEX != "m")
        {
            Average += Array[i].VIK;
            counter++;
        }
    }
    return Average/counter;
}

int AverageAgeM(MISTO* Array, int size)
{
    int counter = 0;
    int Average = 0;

    for (int i = 0; i < size; i++)
    {
        if (Array[i].SEX != "W" && Array[i].SEX != "w")
        {
            Average += Array[i].VIK;
            counter++;
        }
    }
    return Average / counter;
}


void print(MISTO* Array, int size, int AverageAgeW, int AverageAgeM)
{
    cout << "\nDisplay information about those who are older than average.\n";

    for (int i = 0; i < size; i++)
    {
        if (Array[i].SEX != "W" || Array[i].SEX != "w" && Array[i].VIK >= AverageAgeM)
            cout << "Name: " << Array[i].NAME << " VIK:" << Array[i].VIK << " SEX: " << Array[i].SEX << endl;
        if (Array[i].SEX != "M" || Array[i].SEX != "m" && Array[i].VIK >= AverageAgeW)
            cout << "Name: " << Array[i].NAME << " VIK:" << Array[i].VIK << " SEX: " << Array[i].SEX << endl;
    }
}

int main()
{

    int size = 0;
    int AverageAgeWoman = 0;
    int AverageAgeMen = 0;

    cout << "Enter size: ";
    cin >> size;

    MISTO* Array = new MISTO[size];

    FillingStruct(Array, size);
    AverageAgeWoman = AverageAgeW(Array, size);
    AverageAgeMen= AverageAgeM(Array, size);

    cout << "Average age of women =" << AverageAgeWoman;
    cout << "\nAverage age of men =" << AverageAgeMen;

    print(Array, size, AverageAgeWoman,AverageAgeMen);

    delete[]Array;

    system("PAUSE");

    return 0;
}

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

Автор решения: Harry

Сравниваете два указателя, а не строки, на которые они указывают. Правильнее

if (strcmp(Array[i].SEX,"W")

или, раз уж у вас C++. использовать тип string - там как раз такое, как у вас, сравнение имеет смысл.

ДА, кстати, обычно пол обозначают M и F - от Male и Female...

→ Ссылка