ошибка: количество переключателей не целое число C ++ - PullRequest
0 голосов
/ 18 января 2012

У меня проблема при попытке скомпилировать мой код 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

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

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

Ответы [ 4 ]

4 голосов
/ 18 января 2012

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

switch (gender[0])

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

1 голос
/ 18 января 2012

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

char gender;

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

0 голосов
/ 18 января 2012

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

0 голосов
/ 18 января 2012

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

...