-1

我正在尝试用模拟掷骰子构建一个非常简单的第一场比赛。

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

6 回答 6

1

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

于 2013-10-20T16:11:46.393 回答
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;
// ...
于 2013-10-20T16:13:32.120 回答
1

在您的代码中,我看到:

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

airoll();

请注意,语句的开头{switch注释隐藏//

但你仍然有收场}

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

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

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

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

于 2013-10-20T16:34:04.687 回答
1

您的变量aiRollResult未在main()函数范围内定义。它只存在于airoll()函数的范围内。改变你airoll()

int airoll()
{
    int aiRollResult=1+(rand()%6);
    cout<<"AI roll: "<<aiRollResult<<endl;
    return aiRollResult;
}

注意int返回类型。

现在你可以得到airoll()main函数中的结果如下:

int aiRollResult = airoll();

它将调用该airoll()函数,然后将结果存储在变量中。那应该可以解决您的问题。在此处了解有关函数的更多信息: http ://www.cplusplus.com/doc/tutorial/functions/

于 2013-10-20T16:14:40.337 回答
1

这真的很简单。该aiRollResult变量是一个局部变量,在其函数括号之外无法看到

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

于 2013-10-20T16:15:12.403 回答
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;
    }

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

于 2013-10-20T17:36:25.050 回答