0

そこで私はこのプログラムを 2 人用のじゃんけんゲームとして書いています。各プレイヤーが何を選んでも、出力は「プレイヤー 1 が勝つ」というものです。

#include <stdio.h>
int main(void)
{
long player1Choice, player2Choice, p, r, s;


        printf("Player 1, enter paper (p), rock (r), or scissors (s)\n");
            player1Choice=getchar();
            getchar();

        printf("Player 2, enter paper (p), rock (r), or scissors (s)\n");
            player2Choice=getchar();
            getchar();

        if((player1Choice=p)&&(player2Choice=r))    
            printf("Player 1 wins!\n");
        else if((player1Choice=r)&&(player2Choice=p))
            printf("Player 2 wins!\n");
        else if((player1Choice=r)&&(player2Choice=s))
            printf("Player 1 wins!\n");
        else if((player1Choice=s)&&(player2Choice=r))
            printf("Player 2 wins!\n");
        else if((player1Choice=s)&&(player2Choice=p))
            printf("PLayer 1 wins!\n");
        else if((player1Choice=p)&&(player2Choice=s))
            printf("Player 2 wins!\n");


    printf("Press any key to exit");
    getchar();
    return 0;
}

「if」ステートメントの論理「and」が問題を引き起こしている可能性があると思いますが、よくわかりません。

4

2 に答える 2

2

文字定数を一重引用符で囲んでおらず、=必要なときに使用しています==。だから変更例えば

    if((player1Choice=p)&&(player2Choice=r))    

に:

    if((player1Choice=='p')&&(player2Choice=='r'))    

すべての同様のオカレンスに対してこれを行います。

rまた、未使用の変数 、 、pおよびを取り除きますs

そして最後に、コンパイラの警告を有効にして、それらに注意してください。許可していれば、コンパイラはこれらすべての問題を修正するのに役立ちました。

于 2013-10-03T21:36:13.507 に答える
1

p、、rおよびを宣言しましたが、sそれらを初期化していません。=また、等価性のテスト ( ) ではなく代入 ( ) を使用してい==ます。あなたのプログラムは未定義の動作を引き起こします。次の行に沿って何かを意図していたようです。

if ((player1Choice == 'p') && (player2Choice == 'r'))

それらを修正した後、偽の変数を取り除くことができます。または、変数宣言を変更して初期化を含めます。

long player1Choice, player2Choice, p = 'p', r = 'r', s = 's';

問題を解決する必要があります=

コンパイラでさらに警告をオンにする必要があります。たとえば、プログラムの場合、Clang から:

$ clang -Wall example.c -o example
example.c:19:51: warning: variable 's' is uninitialized when used here
      [-Wuninitialized]
        else if((player1Choice=r)&&(player2Choice=s))
                                                  ^
example.c:4:43: note: initialize the variable 's' to silence this warning
long player1Choice, player2Choice, p, r, s;
                                          ^
                                           = 0
example.c:15:27: warning: variable 'p' is uninitialized when used here
      [-Wuninitialized]
        if((player1Choice=p)&&(player2Choice=r))    
                          ^
example.c:4:37: note: initialize the variable 'p' to silence this warning
long player1Choice, player2Choice, p, r, s;
                                    ^
                                     = 0
example.c:15:46: warning: variable 'r' is uninitialized when used here
      [-Wuninitialized]
        if((player1Choice=p)&&(player2Choice=r))    
                                             ^
example.c:4:40: note: initialize the variable 'r' to silence this warning
long player1Choice, player2Choice, p, r, s;
                                       ^
                                        = 0
3 warnings generated.
于 2013-10-03T21:36:15.277 に答える