| 1 kij_82, le 22 nov 2006 à 15:22:20Tu dois pouvoir comparé chaque caractère avec leur valeur dans la table ASCII pour savoir s'il s'agit effectivement d'un chiffre, ou non.
Pour ce qui est des valeurs a tester regarde ici, ce qui correspond en Hexa aux différents chiffres : http://www.table-ascii.com/
Tu test si ta valeur est comprise entre \30 et \39.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 | 2 Fragma, le 22 nov 2006 à 16:04:45Bon, si on prend par exemple une combinaison à 4 chiffres.
Faudrait que je mette chaque chiffre dans une case d'un tableau pour que je puisse les comparer avec le code ASCII ? :s
Ahhh ces boucles!!! Répondre à Fragma | 3 kij_82, le 22 nov 2006 à 16:16:39Etant donné que ta chaine de caractère est un tableau, tu n'as pas à mettre ce qui est saisit par ton utilisateur, tu testes directement dessus de la facon suivante :
for (int i = 0; i < 4; i++ ){
if ( chaine[i] < '\30' && chaine[i] > '\39' ){
/// --- ERREUR SAISIE
}
else {
/// --- faire traitement
}
}
Mais je ne suis plus tres sur que ce soit comme ca qu'on teste la valeur ACSII :s, faudrait que quelqun qui passe par là atteste ou non.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 | 4 Fragma, le 22 nov 2006 à 16:31:11Humm en fait le problème, c'est que quand on saisit des symboles ou des caractères au lieu des chiffres, y a une boucle infinie qui se crée.. je sais pas vraiment la nature du problème .. la boucle ou le test !?
du coup j'ai envie de mettre tout le code pour qu'on me corrige les fauteuuu :((
je désespère :p Répondre à Fragma | 5 kij_82, le 22 nov 2006 à 16:48:17Heu... je peux pas te dire comment.
Met ton code qui est concerné en entier ici et je te dirais.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 | 6 Fragma, le 22 nov 2006 à 17:03:23#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<string.h>
int main()
{
int i,j,x,val,resultat,valide,nb_tentatives=0,nb_tentatives_max=4,trouve;
char combinaison[4],combinaison_gagnante[4];
trouve=0;
resultat=0;
for (i=0; i<4; i++)
srand(time(0));
do { {x=rand()%(10000);
itoa(x,combinaison_gagnante,10);}
valide=1;
i=1;
while (i<4 && valide==1)
{j=0;
while (j<i && valide==1)
{ if (combinaison_gagnante[i]==combinaison_gagnante[j])
valide=0;
else j++;
}
if (valide==1) i++;
} } while((valide==0) && (strlen(combinaison_gagnante)!=4));
printf("la combinaison gagnante est: %s",combinaison_gagnante);
while ((nb_tentatives<nb_tentatives_max) && (trouve==0))
{ do {printf("\nPour jouer a Mastermind, vous devez choisir 4 chiffres. \nVeuillez donner votre combinaison: ");
scanf("%d",&val);
itoa(val,combinaison,10);
} while ((strlen(combinaison)!=4));
if (strcmp(combinaison,combinaison_gagnante)==0)
{printf(" TROUVE!");
trouve=1;}
else
{j=0;
for (i=0; i<=4; i++)
{if (combinaison[i]==combinaison_gagnante[j])
{resultat++;
nb_tentatives++;
j++;}
}
printf("\nresultat: %d X",resultat);}}
system("pause");
return 0;
}
ça c'est pour une combinaison à 4 chiffres ..
(y a plein de fautes :p et il manque le chrono (paske le temps de saisie est limité) et le score .. )
et l'affichage de la combinaison gagnante c'est euh juste pour tester hein!
Hummmm ... Répondre à Fragma |
| 7 kij_82, le 22 nov 2006 à 17:24:04Oups, j'ai rien dit ^^ j'ai mal lu :s
Je regarde.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 | 8 Fragma, le 22 nov 2006 à 17:42:03EDIT: euh j'ai rien dit aussi :))
sinooon ben cette partie-là est sûrement fausse >__<
if (strcmp(combinaison,combinaison_gagnante)==0)
{printf(" TROUVE!");
trouve=1;}
else
{j=0;
for (i=0; i<=4; i++)
{if (combinaison[i]==combinaison_gagnante[j])
{resultat++;
nb_tentatives++;
j++;}
}
printf("\nresultat: %d X",resultat);}}
le X, c'est un chiffre commun à la combinaison saisie par l'utilisateur et la combinaison gagnante, et qui est à sa place. Répondre à Fragma |
| 9 kij_82, le 22 nov 2006 à 17:44:27Bon sinon, la partie :
for (i=0; i<4; i++)
srand(time(0));
do{
x=rand()%(10000);
itoa(x,combinaison_gagnante,10);
valide=1;
i=1;
je me suis dit que tu voulais peut etre plutot faire un truc du genre :
for (i=0; i<4; i++){
srand(time(0));
do{
x=rand()%(10000);
itoa(x,combinaison_gagnante,10);
valide=1;
i=1;
et dans ce cas, faudrait renommé ton deuxieme i en autre chose sinon ca boucle.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 |
| Bon sinon, la partie :
for (i=0; i<4; i++)
srand(time(0));
do{
x=rand()%(10000);
itoa(x,combinaison_gagnante,10);
valide=1;
i=1;
je me suis dit que tu voulais peut etre plutot faire un truc du genre :
for (i=0; i<4; i++)<b>{</b>
srand(time(0));
do{
x=rand()%(10000);
itoa(x,combinaison_gagnante,10);
valide=1;
i=1;
et dans ce cas, faudrait renommé ton deuxieme i en autre chose sinon ca boucle.
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 | En fait le srand ça sert à éviter qu'il y ait la même suite de nombres successivement .. m'enfin .. euh peut-être qu'il faut qu'elle soit hors boucle ... Répondre à Fragma |
| Généralement le srand est mis hors boucle !
En fait le srand n'est pas vraiment aléatoire il me semble, il peut te faire la même suite de nombre d'un coup à l'autre, donc mieux vaut l'initialiser une fois au départ, puis demander un chiffre à chaque passage de boucle.
Toujours est-il que ton code est louche... ta boucle for (i = 0; i < 4; i++ ) ne doit-elle pas englober la partie juste en dessous servant à initialiser ta solution de départ. Enfin... c'est ce qui me semble etre le plus logique apres je me trompe peut etre aussi.
Pour ce qui est de la syntaxe, ca fait un bail que j'ai pas fais de C donc je peux pas dire grand chose la dessus, mais pour ce qui est de l'algo...
Un petit coup de pouce, faut que tu mettes des commentaires dans ton code (anglais c'est mieux, mais francais ca passe aussi) afin que ceux qui reprennent ton code derrière (ou ceux qui veulent t'apporter de l'aide ;) ) puissent comprendre assez facilement de quoi il retourne et pourquoi tu as choisi tel algo et pas un autre par exemple.
Ensuite, pour ce qui est du débugage, rien de tel qu'une bonne méthode maison pour tracer d'ou viens l'erreur :
Dans chaque passage (if , else, while, etc...) tu met une trace évoquante
De cette manière, en lancant ton appli, tu peux suivre ou en est ton prog lors de l'execution, et dans ton cas présent, connaitre la dernière trace avant l'erreur ou la boucle infinie :)
Donc écrit tout ca, lance ton programme (et fais ctrl+C ou D je sais plus, pour l'arreter dans sa boucle infinie), regarde les traces et vois ou la boucle se produit (affiche les valeurs en meme temps pour voir a quoi est du le bouclage (genre variable qui ne s'incrément pas).
Bon courage :)
++
~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~ Répondre à kij_82 |
|
|
|
|
|
|
|