-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関数内の変数:

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

aiRollResultfunction からのname という名前の変数を宣言して初期化する必要がありますairoll()。そのため、関数を return から return に変更しvoidますint。メッセージ表示を切り離します。で表示しmainます。

于 2013-10-20T16:11:46.393 に答える
1

変数aiRollResultmain()関数のスコープで定義されていません。関数のスコープ内にのみ存在し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/ をご覧ください。

于 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 に答える