C ++ if-Statement Malfuncton - PullRequest
       28

C ++ if-Statement Malfuncton

1 голос
/ 11 ноября 2011

Если я введу Artist, я получу if от Artist плюс оператор else.Я не вижу, в чем проблема, что он хорошо компилируется, но только на заглавной букве Artist это дает мне двойное значение на Artist все хорошо.

cin >> answer;

if (answer == "Artist") {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
    cout << "Playing music like a boss" << endl;
    Drums = (Drums + 1);
    Base = (Base + 1);

}
if (answer == "artist") {

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
    cout << "Playing music like a boss" << endl;
    Drums = (Drums + 1);
    Base = (Base + 1);
}
else {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);
    cout << "You should buy a guitar" << endl;
    Drums = (Drums + 1);
    Bag = (Bag - 1);
}

[EDIT] Хорошо, я изменилкод для использования операторов if, но проблема остается.

Ответы [ 4 ]

2 голосов
/ 11 ноября 2011

Как сейчас, если строка содержит «Artist», вы выполните этот блок, не пройдете проверку «Artist» и выполните блок else.

Скорее всего, вы захотите:

else if (answer == "artist") {

Это сделает так, что будет выполнен только один из блоков.

1 голос
/ 11 ноября 2011

Как это работает?Вы не можете включить строку, вы должны использовать равенство строк для проверки.

A оператор switch компилируется в таблицу переходов, где вход по существу выбирает, какая цель в таблице переходоввзят.Таким образом, ваш входной переключатель должен быть целочисленным.Не строка.

1 голос
/ 11 ноября 2011

Нельзя использовать строки в операторах switch. В switch могут использоваться только интегральные константы. Вам придется использовать серию if операторов.

0 голосов
/ 11 ноября 2011

C ++ - не самый сильный язык, но я понимаю, что использование switch со строкой ведет себя неопределенно.

...