ошибка: количество переключателей не является целым числом C++

У меня возникла проблема при попытке скомпилировать код C++. Поскольку я все еще изучаю C++, я все еще не понимаю большинство расширенных команд. Я пытался создать программу, которая запрашивает имя, фамилию, возраст и пол пользователя и отображает его пользователю. Это мой исходный код:

#include <iostream>

int main ()
{
    char firstName[20];
    char lastName[20];
    char age[6];
    char gender[3];

    int i = 0;

    std::cout << "Please enter your full name: ";
    std::cin.getline (firstName, 19, ' ');
    std::cin.getline (lastName, 19);

    std::cout << "Enter your age: ";
    std::cin.getline (age, 5);

    while (i != 1)
    {
        std::cout << "Enter your gender (m/f)";
        std::cin.getline (gender, 2);

        switch (gender)
        {
            case 'm':
                std::cout << "\nHello Mr. ";
                i++;
                break;

            case 'f':
                std::cout << "\nHello Mrs. ";
                i++;
                break;

            default:
                std::cout << "\nThat is not even a gender!\n";
                break;
        }
    }

    std::cout << lastName << "!\n";
    std::cout << "You are " << age << " years old.";

    return 0;
}

Когда я попытался скомпилировать это, мой компилятор выдает следующую ошибку:

NameAgeQ.cpp: In function 'int main()':
NameAgeQ.cpp:24:15: error: switch quantity not an integer

Раньше я пытался кодировать другие программы с операторами «переключатель», и они могут обрабатывать символы. Однако в предыдущих программах я объявлял «пол» как «пол char»; вместо 'char пол [];'.

Почему в данном конкретном случае оператор switch не работает? Он не поддерживает строку массива?


person Xarlexus    schedule 18.01.2012    source источник
comment
Почему в вашем исходном коде нет отступов?   -  person Lightness Races in Orbit    schedule 18.01.2012
comment
Я думаю, что эта ссылка разрешит все ваши сомнения: stackoverflow.com/questions/4535825/   -  person Azodious    schedule 18.01.2012


Ответы (4)


Нет, это не так. Один char является целым числом; массив - нет. В вашем случае эта строка должна исправить это:

switch (gender[0])

Это означает, что вы используете первый char в массиве, который теперь снова является целочисленным типом.

person David M    schedule 18.01.2012
comment
Вероятно, gender — это массив, поэтому его можно использовать с getline. - person Keith Thompson; 18.01.2012
comment
Верно. Удалим этот комментарий. - person David M; 18.01.2012

Вы определили пол как длинный массив из трех символов, но, похоже, вы должны определить его как

char gender;

и используйте его для хранения либо «m», либо «f». Таким образом, вы можете использовать переключатель, как вы уже есть.

person Dor Shemer    schedule 18.01.2012

Попробуйте заменить gender на *gender в переключателе. Что происходит сейчас, так это то, что вы используете массив в качестве параметра, хотя вы хотите использовать только первую букву.

person Michael Krelin - hacker    schedule 18.01.2012

Причина в том, что пол, как имя массива, является указателем на первый элемент массива, чтобы исправить его, вы должны либо сделать switch((*gender)) либо, как было сказано ранее, switch(gender[0])

person user989583    schedule 18.01.2012