2014-10-23 2 views
0

Мне задали задачу создать игру 20 вопросов, используя C++, где пользователь думает о числе от 1 до 100, после чего компьютер догадается. Чтобы сделать это, я пытался научиться использовать оператор switch, поскольку я чувствую, что это поможет мне в моем основном коде. Однако я не могу заставить его работать с постоянной ошибкой незаконного разрыва кода. Я попытался изменить код и искать в Интернете ответы, но я не смог их найти. Мой код выглядит следующим образом:20 Вопросы Game - Заявление о переключении

#include <iostream> 

using namespace std; 

int main() 
    { 
    int i; 
    cout << "Enter an integer: "; 
    cin >> i; 
    switch (int i) 
    { 
     case i > 1 : 
     { 
      cout << "int greater than 1, less than 5"; endl; 
      break; 
     } 
     case i > 5 : 
     { 
      cout << "int greater than 5 less than 10"; endl; 
      break; 
     } 
     case i > 10 : 
     { 
      cout << "int greater than 10"; endl; 
      break; 
     } 
    } 
    system("PAUSE"); 
     return 0; 

} 

И ошибка, которая показывает это:

error C2043: illegal break 

Если кто-то может помочь мне ответить, почему эти ошибки продолжают показывать его будет очень признателен!

+0

Ах, добро пожаловать в мир «С' switch' оператор не ведет себя, как я хотел бы это. " Вы вернетесь много раз. – japreiss

+0

Язык C++ не разрешает операторы реляционных компараторов в операциях 'case'. Значение в выражении 'case' должно быть константой. –

+0

Требуется ли у вашего задания ровно 20 вопросов? Потому что это откровенно перекидыш, в диапазоне 1-100 вам, вероятно, потребуется всего около 10 вопросов, чтобы программа угадала номер. –

ответ

1

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

switch (i) 

Кроме того, это не очень хороший вариант использования для switch, потому что вам нужно:

switch (i) 
{ 
    case 2: 
    case 3: 
    case 4: 
    case 5:  
    { 
     cout << "int greater than 1, less than 5" << endl; 
     break; 
    } 
    case 6: 
    case 7: 
    case 8: 
    case 9: 
    case 10: 
    { 
     cout << "int greater than 5 less than 10" << endl; 
     break; 
    } 
    ///...etc 
} 

Вы должны действительно просто использовать if, else if, else, такие как:

if (i > 1 && i < 5) 
{ 
    cout << "int greater than 1, less than 5" << endl; 
} 
else if (i >= 5 && i < 10) 
{ 
    cout << "int greater than 5 less than 10" << endl; 
} 
else if (i >= 10) 
{ 
    cout << "int greater than 10" << endl; 
} 
else 
{ 
    cout << "int less than 2" << endl; 
}  

Также ваши cout заявления неверны

cout << "int greater than 1, less than 5"; endl; 

Они должны быть

cout << "int greater than 1, less than 5" << endl; 
+0

является "case i> 1' valid? – Creris

+1

@Creris: Нет, это не так. Разрешены только основные константные выражения. – Deduplicator

+0

В этом случае вы можете сделать следующее: 'switch ((n-1)/5)' с операторами 'case' для 0, 1 и 2. Хотя это даст неверный вывод для [-3,0] – genisage