2017-02-26 3 views
1

Ich schreibe einen Code ist über Black Jack. Ich kann es nicht kompilieren, es tritt Warnung auf. Multi-Zeichen-Zeichen Konstante und Überlauf in implizite konstante Konvertierung Kann mir jemand sagen, was los ist. Ich habe es für lange Zeit gedacht plz hilf mir.Multi-Zeichen-Zeichen-Konstante und Überlauf in implizite konstante Konvertierung

#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

Bitte beachten Sie die Schaffung eines [MVCE] (http://stackoverflow.com/help/mcve). Bitte geben Sie auch den vollständigen Text aller Fehlermeldungen an und geben Sie an, in welcher Zeile ein Fehler auftritt. –

Antwort

4

Apostrophe ' bezeichnen 'Zeichenkonstanten'. In der folgenden Zeile

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

die '10' ist ein 'multi-Zeichenkonstante'. Dies ist "Implementierung definiert" - das heißt, verschiedene Compiler können sie auf verschiedene Arten interpretieren. In diesem Fall ist die von Ihnen angegebene Fehlermeldung wahrscheinlich die Quelle Ihres Fehlers. Ich würde vorschlagen, eine enumerated type zu verwenden, um Ihre Karten darzustellen.

+0

Ein Literal hat eine Adresse.Zeichen * Konstanten * haben keine Adresse. – StoryTeller

+1

Sie können mehrere Zeichen haben, aber ihre Bedeutung ist Implementierung definiert. –

+0

@IharobAlAsimi Danke; habe bearbeitet. –

0

Ich hoffe, Sie bekommen diese zwei Fehler

hc: 9: 59: Warnung: Mehrzeichenkonstante

hc: 9: Warnung: Überlauf in implizite konstantem Umsatz

kommt es vor, weil in dem Programm,

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

Sie haben ‚10‘, das ein Multi Charakter konstant ist, ist der Compiler nicht in der Lage es zu einem einzigen Zeichen zu konvertieren.

Aus Wikipedia:

Einzelzeichenkonstanten sind in einfachen Anführungszeichen, z.B. 'A', und haben Typ int (in C++, char). Der Unterschied ist, dass "A" ein Null-terminiertes Array von zwei Zeichen, "A" und "\ 0" darstellt, während "A" direkt den Zeichenwert darstellt (65 wenn ASCII verwendet wird). Die gleichen Backslash-Fluchten werden als für Streicher unterstützt, mit der Ausnahme, dass (von natürlich) "kann, ohne entkam als Zeichen gültig verwendet werden, während" jetzt entwertet werden müssen.

Ein konstanter Charakter kann nicht sein, leer (dh '' ist ungültige Syntax), obwohl eine Zeichenkette sein kann (sie hat immer noch das Nullzeichen ). Mehrzeichen-Konstanten (zB 'xy') sind gültig, obwohl selten nützlich sind - sie lassen mehrere speichern Zeichen in einer Ganzzahl (zB 4 ASCII-Zeichen können in eine 32-Bit-Ganzzahl passen, 8 in einer 64-Bit eins.) Da die Reihenfolge, in der die Zeichen pac sind ked in ein int ist nicht angegeben, portable Verwendung von Multi-Zeichen-Konstanten ist schwierig.