C 二十一点游戏
我在玩一个非常简单的21点游戏,玩家随机抽取0到13的数字,直到他们选择退出或者总数超过21。当他们退出时,他们的总数将与另一个从0到21的随机数进行比较,根据比较结果,他们是赢还是输 现在,我面临的问题是,游戏似乎运行了两次while循环迭代,每次我输入B的值。运行代码,自己看看。就我个人而言,我似乎无法从代码中找出问题所在C 二十一点游戏,c,C,我在玩一个非常简单的21点游戏,玩家随机抽取0到13的数字,直到他们选择退出或者总数超过21。当他们退出时,他们的总数将与另一个从0到21的随机数进行比较,根据比较结果,他们是赢还是输 现在,我面临的问题是,游戏似乎运行了两次while循环迭代,每次我输入B的值。运行代码,自己看看。就我个人而言,我似乎无法从代码中找出问题所在 #include <stdio.h> #include <time.h> #include <stdlib.h> int main
#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”
…我希望其中任何一个都能工作哇。我不知道代码中有一个空格可以“打破游戏规则”。非常感谢!这就解决了:)