Я пытаюсь построить действительно простую первую игру с симулированными бросками костей.
Я получаю сообщение об ошибке в строке 49: if(rollResult>aiRollResult)
,
Я уверен, что это просто очень простая синтаксическая ошибка со всеми if
заявления, но я не могу понять, как это исправить, или я не могу назвать airoll()
функционировать в середине моего кода, как я сделал?
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void airoll();
int main() {
int b;
srand(time(0));
//random die roll
int rollResult = 1+(rand()%6);
switch (rollResult) //results options {
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
case 2: {
cout<<"Your Roll: 2"<<endl;
}
break;
case 3: {
cout<<"Your Roll: 3"<<endl;
}
break;
case 4: {
cout<<"Your Roll: 4"<<endl;
}
break;
case 5: {
cout<<"Your Roll: 5"<<endl;
}
break;
case 6: {
cout<<"Your Roll: 6"<<endl;
}
break;
}
airoll();
if(rollResult>aiRollResult) {
cout<<"You win!"<<endl;
}
if (aiRollResult>rollResult) {
cout<<"You lose!"<<endl;
}
if (rollResult==aiRollResult) {
cout<<"It's a tie!"<<endl;
}
}
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
Ваша переменная aiRollResult
не определен в объеме main()
функция. Он существует только в рамках airoll()
функция.
Измени свой airoll()
в
int airoll()
{
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
return aiRollResult;
}
Обратите внимание на int
тип возврата.
Теперь вы можете получить результат airoll()
в основной функции следующим образом:
int aiRollResult = airoll();
Который назовет airoll()
функция, а затем сохранить результат в переменной. Это должно решить вашу проблему.
Узнайте больше о функциях здесь:
http://www.cplusplus.com/doc/tutorial/functions/
Вы должны объявить и инициализировать переменную с именем aiRollResult
который был бы из функции airoll()
, Так что измени функцию от возврата void
возвращаться int
, Отделить дисплей сообщения; показать это в main
,
Это действительно просто. aiRollResult
переменная — это локальная переменная, которую нельзя увидеть вне скобок ее функции
Чтобы решить эту проблему, вы можете объявить глобальную переменную и инициализировать ее aiRollResult
значение
В вашем коде я вижу:
switch (rollResult) //results options {
[.. bunch of case statements...]
}
airoll();
Обратите внимание, что открытие {
из switch
заявление скрыто //
комментарий.
Но у вас все еще есть закрытие }
,
Я думаю, что вы не соответствовали скобкам.
Последняя скобка, которая, по вашему мнению, закрывает ваш оператор switch, фактически закрывает main. Тогда airoll();
это вызов функции вне любой функции, вызывающий ошибку.
Другие описали проблему определения объема aiRollResult
, но я не думаю, что это прямая причина ошибки, которую вы описываете.
(конечно, если вы разместили точное сообщение об ошибке в вашем первоначальном вопросе мы могли бы быть более полезными)
aiRollResult
переменная внутри функции:
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
является локальной переменной для функции. Это означает, что когда функция завершила работу, целое число освобождается. Я бы посоветовал вам вернуть целое число:
int airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
return aiRollResult;
}
Теперь вы можете заменить:
airoll();
с:
int aiRollResult = airoll();
и вы настроены
Я также заметил, что в выражениях switch вы делаете:
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
Закрывающие скобки не требуются вообще. С помощью этих скобок вы создаете внутренний блок кода. Это полезно, только если вы объявляете переменную внутри case
заявление.
Вы можете переписать эти строки как:
case 1: cout << "Your Roll: 1" << endl; break;
Наконец, не загрязняйте текущее пространство имен:
using namespace std;
привыкнуть использовать std::
префикс или включить то, что вам действительно нужно с:
using std::cout;
using std::endl;
// ...
Подводя итог всему сказанному, но на самом деле никто не сказал все сразу:
switch (rollResult) //results options {
Это вызывает несовпадающую скобку. Поставьте скобку перед комментарием, вот так:
switch (rollResult) { // results options
Хотя это технически правильно, это отстой:
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
Измените это на это:
case 1:
cout<<"Your Roll: 1"<<endl;
break;
Это не делает ничего полезного для следующих операторов if:
airoll();
Сделайте так, чтобы это выглядело так:
aiRollResult = airoll();
Конечно, это означает, что вам придется объявить aiRollResult выше в разделе объявлений.
Наконец, эта функция печатает значение, но вы не можете использовать это значение, потому что оно сразу же выбрасывает это значение прямо в мусорную корзину:
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
Сделайте так, чтобы это выглядело так:
int airoll() {
int aiRollResult = 1 + (rand() % 6);
cout << "AI roll: " << aiRollResult << endl;
return aiRollResult;
}
Кроме того, комментарий о загрязнении пространства имен может быть принят во внимание, но давайте не будем вступать в борьбу в стиле кодирования, а?