在while循环中,getchar()函数不会仅被第一次调用

时间:2018-12-06 13:42:51

标签: c

我正在编写一个程序,允许用户玩游戏。

掷出两个骰子,如果总和是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;
  }

}

0 个答案:

没有答案