2017-02-26 85 views
1

我写的代码是关于黑色的插口。 我无法编译它,它会发生警告。 多字符字符常量和隐式常量转换溢出 任何人都可以告诉我发生了什么事情。 我已经想了很久,plz帮助我。多字符字符常量和溢出中隐式常量转换

#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

请考虑创建一个[mvce](http://stackoverflow.com/help/mcve)。也请包括任何错误信息的完整文本,并指出它失败的行。 –

回答

4

单引号'表示'字符常量'。在以下行

char number_all [13]={'A','2','3','4','5','6','7','8','9','10','J','Q','K'}; 

'10'是一个'多字符常量'。这是'实现定义' - 也就是说,不同的编译器可以以不同的方式解释它。在这种情况下,如果您提供了错误消息,则可能是您的错误来源。我建议使用enumerated type来代表你的名片。

+0

文字有一个地址。字符*常量*没有地址。 – StoryTeller

+1

你可以有多个字符,但它们的含义是实现定义的。 –

+0

@IharobAlAsimi谢谢;已编辑。 –

0

我希望你得到这两个错误

HC:9:59:警告:多字符常量

HC:9:警告:溢出隐不断转换

它发生因为在程序中,

炭number_all [13] = { 'A', '2', '3', '4', '5', '6', '7', '8' , '9', '10', 'J', 'Q', 'K'};

你有“10”这是一个多字符常量,编译器无法将其转换成一个字符。

维基百科:

个性常数是单引号,例如'A',并且有 int类型(在C++中,char)。不同的是,“A”表示两个字符'A'和'\ 0'的空终止数组,其中'A' 直接表示字符值(如果使用ASCII,则为65)。所述 相同反斜杠转义支持被作为字符串,不同之处在于(的 课程)“可以有效地被用作一个字符不被转义, 而'现在必须转义。

字符常量不能虽然 很少有用 - 它们让一个存储多个字符常量(例如,'xy')是有效的字符整数 (例如,4个ASCII字符可以适合32位整数,8个可以适用于64位 之一)。由于字符的顺序是pac ked成int 未指定,便携式多字符常量使用难度为 。

相关问题