我正在编写一个程序,允许用户玩游戏。
掷出两个骰子,如果总和是7或11,则用户获胜;如果输出2、3或12,则该用户输掉;而对于其他任何数字,该用户将继续掷骰子,直到他击中第一个的值再次掷骰,获胜,或输7。然后,询问用户是否要再次玩游戏。
我的算法工作得很好,但最后我仍然遇到一个非常简单的问题。当询问用户是否要继续玩时,程序会正确停止并等待用户输入“ y”或“ n”,如果答案是肯定的,则再次正确运行代码,或者只是退出程序,如果不是。如果用户输入y,则第二个匹配项正确播放,但一旦“再次播放?”被打印出来,程序不再等待用户输入,而仅退出程序。我真的不知道为什么会这样,因为getchar()函数仍然存在,应该始终执行...
反正这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
typedef int BOOL;
#define TRUE 1
#define FALSE 0
int roll_dice(void);
BOOL play_game(void);
int main(){
BOOL game;
char check;
srand((unsigned) time(NULL));
do{
game = play_game();
if(game == TRUE){
printf("\nYou win!\n");
}
else{
printf("\nYou lose!\n");
}
printf("\nPlay again?: ");
check = getchar();
}while(tolower(check) == 'y');
return 0;
}
int roll_dice(void){
int x, y;
x = (rand() % 6) + 1;
y = (rand() % 6) + 1;
return x + y;
}
BOOL play_game(void){
int first_roll, x = 0;
first_roll = roll_dice();
printf("\nYou rolled: %d", first_roll);
if(first_roll == 7 || first_roll == 11){
return TRUE;
}
else if(first_roll == 2 || first_roll == 3 || first_roll == 12){
return FALSE;
}
else{
while(x != 7 && x != first_roll){
x = roll_dice();
printf("\nYou rolled: %d", x);
}
return x == 7 ? FALSE : TRUE;
}
}