#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int flower;
int k;
int add [13]={1,2,3,4,5,6,7,8,9,10,10,10,10};
char flower_all [4]={'\3','\4','\5','\6'};
char number_all [13]={'A','2','3','4','5','6','7','8','9','10','J','Q','K'};
char player_f[13],player_n[13];
char com_f[13],com_n[13];
int poker [52]={0};
int i,j,y,num,ans;
int player_p=0,com_p=0;
void wash (){
int k;
k=rand()%52;
while(poker[k]==1)
{
k=rand()%52;
}
poker[k]=1;
}
void give_card_p (){
char player_f[13],player_n[13];
int i,k;
int ans;
printf("請問是否要補牌? 1:要 2:不要");
scanf("%d",&ans);
fflush(stdin);
while (ans==1){
wash();
player_f[i]=flower_all[k/13];
player_n[i]=number_all[k%13];
player_p+=add[k%13];
continue;
if (player_p>21)
break;
}
}
int main (){
srand(time(0));
char player_f[13],player_n[13];
int k;
for(i=0;i<2;i++){
wash ();
player_f[i]=flower_all[k/13];
player_n[i]=number_all[k%13];
player_p+=add[k%13];
}
for (i=0;i<2;i++){
wash ();
com_f[i]=flower_all[k/13];
com_n[i]=number_all[k%13];
com_p+=add[k%13];
}
printf("%c%c",player_f[i],player_n[i]);
fflush(stdin);
return 0;
}
答案 0 :(得分:4)
单引号'
表示字符常量&#39;。在以下一行
char number_all [13]={'A','2','3','4','5','6','7','8','9','10','J','Q','K'};
'10'
是一个多字符常量&#39;。这是“[9]实施定义&#39; - 也就是说,不同的编译器可以以不同的方式自由解释它。在这种情况下,根据您提供的错误消息,它可能是您的错误的来源。我建议使用enumerated type代表您的卡片。
答案 1 :(得分:1)
我希望你收到这两个错误
h.c:9:59:警告:多字符字符常量
h.c:9:警告:隐式常量转换溢出
这是因为在程序中,
char number_all [13] = { 'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',” Q”, 'K'};
你有 '10'这是一个多字符常量,编译器无法将其转换为单个字符。
来自维基百科:
单个字符常量是单引号,例如'A',并且有 type int(在C ++中,char)。区别在于“A”代表a 以空值终止的两个字符数组,'A'和'\ 0',而'A' 直接表示字符值(如果使用ASCII,则为65)。该 对于字符串,支持相同的反斜杠转义,除了( 当然)“可以有效地用作角色而不被逃脱, 而'现在必须逃脱。
字符常量不能为空(即''语法无效), 虽然字符串可能是(它仍然有空终止 字符)。但是,多字符常量(例如'xy')是有效的 很少有用 - 他们让一个整数存储几个字符 (例如,4个ASCII字符可以容纳32位整数,8位符合64位 一)。由于字符被打包成int的顺序 未指定,可移植使用多字符常量 困难的。