C 二十一点游戏

C 二十一点游戏,c,C,我在玩一个非常简单的21点游戏,玩家随机抽取0到13的数字,直到他们选择退出或者总数超过21。当他们退出时,他们的总数将与另一个从0到21的随机数进行比较,根据比较结果,他们是赢还是输 现在,我面临的问题是,游戏似乎运行了两次while循环迭代,每次我输入B的值。运行代码,自己看看。就我个人而言,我似乎无法从代码中找出问题所在 #include <stdio.h> #include <time.h> #include <stdlib.h> int main

我在玩一个非常简单的21点游戏,玩家随机抽取0到13的数字,直到他们选择退出或者总数超过21。当他们退出时,他们的总数将与另一个从0到21的随机数进行比较,根据比较结果,他们是赢还是输

现在,我面临的问题是,游戏似乎运行了两次while循环迭代,每次我输入B的值。运行代码,自己看看。就我个人而言,我似乎无法从代码中找出问题所在

#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;
 }
#包括
#包括
#包括
内部主(空)
{
int sum=0,A[5],i=1,temp,pivot=0;
charb='y';
srand(时间(空));
pivot=rand()%21;
printf(“您现在正在玩vingt et un。\n要绘制一个数字,请按y。要随时终止,请按n。\n”);
做
{  
temp=rand()%13;
总和=总和+温度;
printf(“您绘制的数字是%d,总和是%d.\n”,temp,sum);
如果(总和>21){printf(“Busted”);break;}
scanf(“%c”和“B”);
}而(B!='n');
if(sumpoint)
printf(“你赢了。Pivot是%d”,Pivot);
如果(总和=21)
printf(“头奖”);

if(sum请参阅@Weather Vane和@vicky96在OP中的注释。您需要在语句中添加前面的空格,如:
“%c”
。这将占用换行符

解决这个问题的一个线索实际上已经存在于您的代码中!最后的两个
getchar()
调用正是为了达到这个目的:程序完成后,等待用户按Enter键。但是,您需要两个getchar,因此“\n”换行符也会被使用


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

当您点击enter键时,键入了一个换行符。因此实际上您正在向stdin发送两个字符。
scanf(“%c”,&B);
-->
scanf(%c,&B);
注意我添加的空格,这会清除诸如
newline
之类的空白。这可能是一个看似愚蠢的建议,但我也遇到了同样的问题,这对我很有效……尝试两件事……在最后一行,即
scanf()
do{}
…替换
%c“
与1.
%c“
或2.
%c”
…我希望其中任何一个都能工作哇。我不知道代码中有一个空格可以“打破游戏规则”。非常感谢!这就解决了:)