我正在玩一种非常基本的二十一点游戏,其中玩家从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;
}
答案 0 :(得分:1)
请查看来自@Weather Vane和@ vicky96的OP中的评论。您需要在scanf语句中添加前面的空格,如下所示:" %c"
。这将为您使用换行符。
解决这个问题的一个线索实际上已经存在于您的代码中!最后两个getchar()
调用正是为了这个目的:一旦程序完成,等待用户点击 Enter 。但是,您需要两个getchars,因此也会消耗'\ n'换行符。
使这段代码更清晰(意图/目的)的一个建议是用一个getchar()
语句替换两个printf("\n")
调用,并且命令行将再次以干净的换行符开始。