所以我正在制作一个骰子游戏,你掷出一定数量的骰子,然后电脑滚动相同的数量,总数最高的玩家赢得这一轮。然而,我被困在循环上,询问玩家是否想要再次滚动。无论我输入什么,它都会再次滚动。我已经坚持了一段时间,所以任何帮助都会非常感激。
#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;
}
答案 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
的值,您应该问自己:
“我在哪里设置此值?我如何设置值?”