Простая игра в кости, сообщение об ошибке

Я пытаюсь построить действительно простую первую игру с симулированными бросками костей.

Я получаю сообщение об ошибке в строке 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;
}

-1

Решение

Ваша переменная 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/

1

Другие решения

Вы должны объявить и инициализировать переменную с именем aiRollResult который был бы из функции airoll(), Так что измени функцию от возврата void возвращаться int, Отделить дисплей сообщения; показать это в main,

1

Это действительно просто. aiRollResult переменная — это локальная переменная, которую нельзя увидеть вне скобок ее функции

Чтобы решить эту проблему, вы можете объявить глобальную переменную и инициализировать ее aiRollResult значение

1

В вашем коде я вижу:

switch (rollResult) //results options {
[.. bunch of case statements...]
}

airoll();

Обратите внимание, что открытие { из switch заявление скрыто // комментарий.

Но у вас все еще есть закрытие },

Я думаю, что вы не соответствовали скобкам.

Последняя скобка, которая, по вашему мнению, закрывает ваш оператор switch, фактически закрывает main. Тогда airoll(); это вызов функции вне любой функции, вызывающий ошибку.

Другие описали проблему определения объема aiRollResult, но я не думаю, что это прямая причина ошибки, которую вы описываете.

(конечно, если вы разместили точное сообщение об ошибке в вашем первоначальном вопросе мы могли бы быть более полезными)

1

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;
// ...
1

Подводя итог всему сказанному, но на самом деле никто не сказал все сразу:

    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;
}

Кроме того, комментарий о загрязнении пространства имен может быть принят во внимание, но давайте не будем вступать в борьбу в стиле кодирования, а?

0
По вопросам рекламы [email protected]