简单的骰子游戏,错误消息

时间:2013-10-20 16:06:32

标签: c++ syntax dice

我正在尝试使用模拟骰子来构建一个非常简单的第一个游戏。

我在第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;
}

6 个答案:

答案 0 :(得分:1)

您必须声明并初始化一个名为aiRollResult的变量,该变量来自函数airoll()。因此,将函数从返回void更改为返回int。解密消息显示;在main中显示。

答案 1 :(得分: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;
// ...

答案 2 :(得分: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/

答案 3 :(得分:1)

这很简单。 aiRollResult变量是一个局部变量,在其函数括号

之外无法看到

要解决此问题,您可以声明一个全局变量并将其初始化为aiRollResult

答案 4 :(得分:1)

在您的代码中,我看到:

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

airoll();

请注意,{语句的开头switch会被//评论隐藏。

但你仍然有结束}

我认为你的大括号不匹配。

您认为关闭switch语句的最后一个大括号实际上正在关闭main。然后airoll();是任何函数外的函数调用,导致错误。

其他人已经描述了aiRollResult的范围问题,但我认为这不是您所描述的错误的直接原因。

(当然,如果您在原始问题中发布了 确切错误消息 ,我们可能会更有帮助)

答案 5 :(得分:0)

总结所说的一切,但没有人真正说过一切:

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

此外,关于命名空间污染的评论可能会被考虑在内,但是我们不要进入编码风格的斗争,呃?