nb -= 26;
int type = nb % 10;
int valeur = (nb - type) / 10;
if (type >= 0 && type < (sizeof(CarteType) / sizeof(char*)) && valeur >= 0 && valeur < (sizeof(CarteVal) / sizeof(char*)))
printf("***Votre carte est %s de %s***!\n", CarteVal[valeur], CarteType[type]);
else
printf("Désolez votre nombre ne correspond à aucune carte !\n");
(sizeof(CarteType) / sizeof(char*)) = nombre d'élément dans CarteType
Braiman
Messages postés4Date d'inscriptionmardi 1 juillet 2003StatutMembreDernière intervention22 décembre 2007 24 déc. 2009 à 14:43
On peu faire deux tableaux associatifs.
Le premier contiendrait carreau, coeur, ...
Le deuxième contiendrait As, Deux, Troix, ...
On aurait plus qu'à faire résultat = résultat - 26
Le modulo 10 donnerait directement l'index du premier tableau (si compris entre 0 et 3)
[(résultat - résultat modulo 10) / 10] donnerait directement l'index du deuxième tableau (si compris entre 0 et 12)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 24 déc. 2009 à 12:20
La source section source est là pour poster des codes techniquement intéressant ou pédagogique. Elle n'est pas là pour accueillir le premier programme des débutants, fier de montrer qu'ils savent à peu près bidouiller.
Si tu veux montrer ton code, c'est plutôt sur le forum qu'il faut aller. Tu mets en sujet: "Critiquer mon code".
Le code est pas terrible, il y a énormément de redondance. C'est peu intéressant techniquement puisque c'est uniquement une suite de if.
Il aurait été plus judicieux de réaliser un tableau associatif.
typedef struct
{
int num;
char* nom;
} carte;
static const carte[] =
{
{26, "As de carreau"},
etc...
{149, "Roi de trèfle"},
0
};
nb = nombre entré par l'utilisateur
int i = 0;
while (carte[i] && carte[i] != nb)
++i;
if (!carte[i])
printf("Désolez votre nombre ne correspond à aucune carte !\n");
else
printf("***Votre carte est %s***!\n", carte[i]);
24 déc. 2009 à 15:20
static char* CarteType[] = {"Carreau", "Coeur", "Pique", "Trefle"};
static char* CarteVal[] = {"As", "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Valet", "Dame", "Roi"};
int nb = 27; // Nombre saisi
nb -= 26;
int type = nb % 10;
int valeur = (nb - type) / 10;
if (type >= 0 && type < (sizeof(CarteType) / sizeof(char*)) && valeur >= 0 && valeur < (sizeof(CarteVal) / sizeof(char*)))
printf("***Votre carte est %s de %s***!\n", CarteVal[valeur], CarteType[type]);
else
printf("Désolez votre nombre ne correspond à aucune carte !\n");
(sizeof(CarteType) / sizeof(char*)) = nombre d'élément dans CarteType
24 déc. 2009 à 14:43
Le premier contiendrait carreau, coeur, ...
Le deuxième contiendrait As, Deux, Troix, ...
On aurait plus qu'à faire résultat = résultat - 26
Le modulo 10 donnerait directement l'index du premier tableau (si compris entre 0 et 3)
[(résultat - résultat modulo 10) / 10] donnerait directement l'index du deuxième tableau (si compris entre 0 et 12)
24 déc. 2009 à 12:20
Si tu veux montrer ton code, c'est plutôt sur le forum qu'il faut aller. Tu mets en sujet: "Critiquer mon code".
Le code est pas terrible, il y a énormément de redondance. C'est peu intéressant techniquement puisque c'est uniquement une suite de if.
Il aurait été plus judicieux de réaliser un tableau associatif.
typedef struct
{
int num;
char* nom;
} carte;
static const carte[] =
{
{26, "As de carreau"},
etc...
{149, "Roi de trèfle"},
0
};
nb = nombre entré par l'utilisateur
int i = 0;
while (carte[i] && carte[i] != nb)
++i;
if (!carte[i])
printf("Désolez votre nombre ne correspond à aucune carte !\n");
else
printf("***Votre carte est %s***!\n", carte[i]);