骰子程序不起作用

时间:2013-02-13 18:26:05

标签: c

所以我正在制作一个骰子游戏,你掷出一定数量的骰子,然后电脑滚动相同的数量,总数最高的玩家赢得这一轮。然而,我被困在循环上,询问玩家是否想要再次滚动。无论我输入什么,它都会再次滚动。我已经坚持了一段时间,所以任何帮助都会非常感激。

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

3 个答案:

答案 0 :(得分:4)

将您的计划更改为

if (yesorno == 'Y')

您正在分配而不是检查是。

答案 1 :(得分: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,并且您处于无限循环中。

修改的 正如第二位评论者所说,你在if中分配yesorno。但无论如何,如果你写==而不是=,你仍然会处于无限循环中。

答案 2 :(得分:0)

这两行之间存在非常的巨大差异 你能发现它吗?

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

此外,因为您正在检查yesorno的值,您应该问自己:
“我在哪里设置此值?我如何设置值?”