C语言21点循环问题

Python016

C语言21点循环问题,第1张

你在第一次选择Y的时候实际上输入了两个字符,一个‘Y',一个’\n'(回车符),scanf接受'Y'将其赋给d,但是回车符还在输入流中等待被接受,因此在第二次选择scanf就把'\n'赋给了变量d,所以会出现这错误,在scanf("%c",&d)前加一句"while(getchar()!='\n')"吸收掉回车符就能解决这个问题

#include<stdio.h>

int main()

{

int a[4], sum = 0

printf("请输入三张牌")

scanf("%d%d%d", &a[0], &a[1], &a[2])

for(int i = 0i <3I++)

{

if(a[i] >10) sum += 10

else

sum += a[i]

}

for(int i = 0i <3i++)

{

if(a[i] == 1 &&sum + 10 <= 21)

sum += 10

}

printf("总值为:%d\n", sum)

return 0

}

请采纳,谢谢

void fapai(int* who,int* len) //发牌函数

{

while(1)

{

int temp = rand()%52 //随机取一张牌

if(pai[temp]==0) //如此牌还在

{

pai[temp]=1, who[(*len)++]=temp%13 //标记此牌已发,将此牌的点数记入who数组

return

}

}

}int calc(int* who,int len) //计算总点数

{

int s=0,i

for(i=0i<leni++)//对每一张牌

s+=who[i]>9 ? 10 : (who[i]+1) //s=s+who[i]who[i]>9,则who[i]=10,否则who[i]=who[i]+1.

//牌点大于9的,记10分,否则记1分

if(s>21) s=0 //若超过21分,则“爆了”,清0

else if(s<=12)//若点数不满13

{

for(i=0i<leni++)

if(who[i]==0 &&s<=12) //若第i张牌为0,补加9点

s+=9 //s=s+9

}

return s

}