隐式常量转换中的多字符字符常量和溢出

时间:2017-02-26 13:03:47

标签: c

我写的代码是关于黑杰克的。  我无法编译它,它发生警告。 隐式常量转换中的多字符字符常量和溢出  任何人都可以告诉我发生了什么。  我已经想好了很长时间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;
}

2 个答案:

答案 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的顺序     未指定,可移植使用多字符常量     困难的。