-3

だから私はサイコロゲームを作っています。あなたは斧の量のサイコロを転がし、コンピュータは同じ量を転がし、合計が最も高いプレイヤーがラウンドに勝ちます。ただし、プレイヤーにもう一度ロールするかどうかを尋ねるループでスタックしています。何を入力しても、また転がります。私はしばらくこれに固執していたので、どんな助けでも大歓迎です。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
    /* Easy dice game
    |
    |  The game consists of 7 rounds.
    |  In each round, the computer throws a die, 
    |  then the human throws a die.
    |  The winner of the round is the player who has the highest throw.
    |  In case of a tie, neither player wins.
    |  The winner of the game is the player who has won the most rounds.
    |
    */

    char input[132];   /* user input buffer */

int throwDie()
{
    static int initialized = 0;
    int num;

    if ( !initialized )
    {
        printf("Initializing Die!\n\n");
        srand( time(NULL) );
        initialized = 1;
    }
    num = rand()%6 + 1 ;
    return num;
}

/* Human turn
|
|  This might be mode made interesting in the future.
|
*/
int humanTurn()
{
    int toss;
    toss = throwDie();
    printf("Human throws a %d\n", toss );
    return toss;

}

/* Computer turn
|
|  This might be made more interesting in the future.
|
*/
int computerTurn()
{
    int toss;
    toss = throwDie();
    printf("Computer throws a %d\n", toss );
    return toss;
} 

int main(int argc, char *argv[])
{
    int round, humanWins=0, computerWins=0 ;
    int humanToss, computerToss;
    int i = 0, yesorno;
    const int numberOfRounds = 7;
    char ta=0;
    /* Play 13 Rounds */
    for ( round = 1; round<=numberOfRounds; round++ )
    {
        printf("\nRound %d\n\n", round );
        printf("Player's Turn: (hit enter)");
        gets( input ); /* pause for dramatic effect */
        humanToss = humanTurn();
        printf("Do you wish to throw again? [Y or N]");
        ta = getchar();


        while (i == 0)
        {
            if (yesorno = 'Y')
            {
                gets( input );
                humanToss = humanTurn();
                printf("Do you wish to throw again? [Y or N]");
                ta = getchar();

            }
            if(yesorno == 'N')
            {
                i++;
            }
        }




        printf("Computer's Turn: (hit enter)");

        gets( input ); /* pause for dramatic effect */
        computerToss = computerTurn();

        /* Determine Winner of the Round */
        if ( humanToss > computerToss )
        {
            humanWins++;
            printf("\tHuman wins the round.    human: %3d. computer: %3d\n",
                humanWins, computerWins );
        }
        else if ( computerToss > humanToss )
        {
            computerWins++;
            printf("\tComputer wins the round. human:%3d. computer: %3d\n",
                humanWins, computerWins );
        }
        else if ( computerToss == humanToss)
        {
            printf("\tTie.                     human:%3d. computer: %3d\n",
                humanWins, computerWins );
        }
    }

    /* Determine Winner to the Game */
    if ( humanWins > computerWins )
        printf("\n\nWINNER!! The human wins the game!\n");
    else if ( computerWins < humanWins )
        printf("\n\nThe computer wins the game!\n");
    else
        printf("\n\nTie Game!\n");

    printf("\n");
    system("pause");
    return 0;
}
4

3 に答える 3

4

プログラムを次のように変更します

if (yesorno == 'Y')

はいをチェックする代わりに割り当てています。

于 2013-02-13T18:32:01.200 に答える
1

ここで立ち往生しています:

while (i == 0)
{
  if (yesorno = 'Y')
  {
     gets( input );
     humanToss = humanTurn();
     printf("Do you wish to throw again? [Y or N]");
     ta = getchar();

  }
  if(yesorno == 'N')
  {
     i++;
  }
}

yesorno前の入力からの値があります。次に、新しい入力を受け取りますが、変数yesornoは同じです-変数を設定するだけなta ので、yesorno常に'Y'i常に0であり、無限のwhileループになります。

yesorno2 番目のコメンターが言ったように、編集して、if に 割り当てています。とにかく、==の代わりに書く=と、無限ループに陥ります。

于 2013-02-13T18:31:42.213 に答える
0

この 2 つの行には非常に大きな違いがあります。
あなたはそれを見つけることができますか?

if (yesorno = 'Y')
if (yesorno == 'N')

また、 の値をチェックしているので、「この値をどこに設定するのか? どのように値を設定するのか?」とyesorno自問する必要があります。

于 2013-02-13T23:49:54.400 に答える