Alors ... J'ai un petit morceau de code que je travaille sur la majeure partie de la matinée. C'est juste un petit projet pour m'aider à me souvenir de la syntaxe et ainsi de suite. J'ai évidemment manqué une sorte d'erreur massive comme le code renvoie une faute de segmentation pour des raisons que je ne comprends pas.C - Honnêtement à une perte de ce comportement étrange
#include <stdio.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <getopt.h>
struct cards
{
int card_value[99];
char card_name[99];
char card_suit[99];
int card_tally;
};
struct cards hand[2];
void tally (int a)
{
int k, j;
for (k=0; k<5; k++)
{
j = j + hand[a].card_value[k];
}
hand[a].card_tally = j;
}
void check_for_ace (int a)
{
int d;
for (d=0; d>5; d++)
{
if (hand[a].card_name[d] =='A')
{
int y;
int z = 10;
for (y=0; y<5; y++)
z = z + hand[a].card_value[y];
if (z < 22)
hand[a].card_value[d]=10;
else
hand[a].card_value[d]=1;
}
}
}
void draw_card (int a)
{
int z = 1 + rand() % 13;
int x=0;
while (hand[a].card_value[x] != 0)
{ x++; }
if ((z > 1) && (z < 10))
{
hand[a].card_value[x]=z;
hand[a].card_name[x]=((char) '0' + z);
}
else if (z == 10)
{
hand[a].card_value[x]=z;
hand[a].card_name[x]='T';
}
else if (z == 11)
{
hand[a].card_value[x]=10;
hand[a].card_name[x]='J';
}
else if (z == 12)
{
hand[a].card_value[x]=10;
hand[a].card_name[x]='Q';
}
else if (z == 13)
{
hand[a].card_value[x]=10;
hand[a].card_name[x]='K';
}
else if (z == 1)
{
/*Function 'check_for_ace' deals with this more properly*/
hand[a].card_value[x]=1;
hand[a].card_name[x]='A';
}
check_for_ace(a);
tally(a);
}
void display_hands()
{
int x;
printf("\nDealer's Hand Shows: ");
for (x=0; hand[0].card_name[x]!=0; x++)
{
printf("%c ", hand[0].card_name[x]);
}
printf("\nPlayer's Hand Shows: ");
for (x=0; hand[1].card_name[x]!=0; x++)
{
printf("%c ", hand[1].card_name[x]);
}
}
void dealer_turn()
{
while (hand[0].card_tally < 17)
draw_card(0);
}
void player_turn()
{
int op=0;
while (op != 2)
{
printf("What would you like to do?\n");
printf("(1)it or (2)tand\n");
scanf("%d", &op);
if (op == 1)
draw_card(1);
}
}
int main(int argc, char **argv)
{
srand(time(NULL));
draw_card(0);
draw_card(1);
draw_card(1);
display_hands();
player_turn();
dealer_turn();
display_hands();
return 0;
}
Maintenant, la chose vraiment étrange est, voir cette ligne vide entre player_turn et dealer_turn? Si je mets un display_hands là-dedans le code s'exécute sans erreur.
Des idées?
Aussi, je me rends compte que je l'ai fait utiliser les en-têtes Je ne ont pas besoin. Je prévois de les utiliser plus tard et je les ai juste laissés pour ce poste, de sorte que j'aurais tout laissé exactement comme il est avec l'erreur.
Lire les avertissements du compilateur! –
Vouliez-vous inclure deux fois? Ne devrait-on pas être ? –
Inisheer
Armin: Tout ce que je reçois est un avertissement de déclaration de fonction implicite à propos de rand mais rand retournera des nombres dans une boucle jusqu'à ce que j'en ai marre de les voir sans causer d'erreur. Y a-t-il une erreur qui me manque? – cwm