C中的二十一点游戏

时间:2015-12-15 19:51:02

标签: c

我正在玩一种非常基本的二十一点游戏,其中玩家从0到13之间抽取随机数,直到他们选择退出或者他们的总数超过21.当他们退出时,他们的总数与另一个相比随机数范围从0到21,并根据比较,他们输赢。

现在,我面临的问题是,每当我输入B的值时,游戏似乎会运行while循环的两次迭代。运行代码并亲自查看。对于我的生活,我似乎无法弄清楚代码中的问题。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main (void)
{
    int sum=0,A[5],i=1,temp,pivot=0;
    char B='y';
    srand(time(NULL));
    pivot=rand()%21;
    printf("You are now playing vingt-et-un.\nTo draw a number, press y.To terminate at any time, press n.\n");

    do
    {  
        temp=rand()%13;
        sum=sum+temp;
        printf("The number you drew is %d, sum is %d.\n",temp,sum);
        if(sum>21) {printf("Busted."); break;} 
        scanf("%c",&B);
    } while(B!='n');

    if (sum<21&&sum>pivot)
      printf("You win. Pivot was %d",pivot);

    if (sum==21)
      printf("JACKPOT");

    if(sum<pivot)
      printf("Busted. Pivot was %d",pivot);

    getchar();
    getchar();
    return 0;
 }

1 个答案:

答案 0 :(得分:1)

请查看来自@Weather Vane和@ vicky96的OP中的评论。您需要在scanf语句中添加前面的空格,如下所示:" %c"。这将为您使用换行符。

解决这个问题的一个线索实际上已经存在于您的代码中!最后两个getchar()调用正是为了这个目的:一旦程序完成,等待用户点击 Enter 。但是,您需要两个getchars,因此也会消耗'\ n'换行符。

使这段代码更清晰(意图/目的)的一个建议是用一个getchar()语句替换两个printf("\n")调用,并且命令行将再次以干净的换行符开始。