Problème d'affichage sur un mastermind en c
Bonjour la communauté,
J’aimerai avoir un peu d'aide sur un problème récurrent de mon code.
Ma fonction saisi_comb() me permet d'entrer la combinaison supposée par le joueur.
Cette combinaison est en faite un nombre (sous forme d'une suite d'entier) qui sera découpé pour vérifier s'il correspond a la combinaison initiale (j'aurais pus utiliser une chaîne de caractères a la place mais j'ai pris un autre choix de conception).
Pour découper mon nombre je récupère la partie d'une division.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| long saisi_comb(long* tablo)
{
cout<<"Saisisser la combinaison suppose (entier)"<<endl;
int combinaison;
int return_val = 1;
int rang=0;
cin>>combinaison;
int temp=0;
if ( (combinaison/pow(10,TAI-1))>1 && (combinaison/pow(10,TAI))<1 ) //on verifit que combinaison comporte bien TAI nombres
{
for (int cpt = TAI-1; cpt>=0; cpt--)
{
if (return_val==1) //tant que les condition ci-dessous sont vraie
{
temp = combinaison/pow(10,cpt); //on recupere la partie entiere de la division
if (temp >0 && temp<9)
{
cout<<" combinaison (in function 2) ["<<cpt<<"] : "<<combinaison<<endl;
tablo[rang]=temp;
//cout<<" -->temp*pow(10,cpt) : "<<temp*pow(10,cpt)<<endl;
//cout<<" -->combinaison - (temp*pow(10,cpt)) = "<<combinaison<<" - "<<(temp*pow(10,cpt))<<" = "<<combinaison - (temp*pow(10,cpt))<<endl;
combinaison = combinaison - (temp*pow(10,cpt)); //pourquoi pour cpt=3 il soustrait -1 au dernier nombre de la chaine. Pourquoi effectue t'il le calcul suivant : combinaison - (temp*pow(10,3)) -1
cout<<" combinaison (in function 2) 1 : "<<combinaison<<endl;
rang++;
}
else
{
return_val= 0 ;
}
}
}
}
else
{
return_val=0;
//cout<<"condition 1 fausse"<<endl;
}
return return_val;
} |
Par contre l'invite de commande affiche :
Citation:
Combi initiale:
7.1.2.6.8
Saisisser la combinaison suppose (entier)
71268
combinaison (in function 2) [4] : 71268
combinaison (in function 2) 1 : 1268
combinaison (in function 2) [3] : 1268
combinaison (in function 2) 1 : 267
combinaison (in function 2) [2] : 267
combinaison (in function 2) 1 : 67
combinaison (in function 2) [1] : 67
combinaison (in function 2) 1 : 7
combinaison (in function 2) [0] : 7
combinaison (in function 2) 1 : 0
J'arrive pas a comprendre pourquoi lorsque le compteur cpt = 3, j'ai ma chaîne combinaison soustraite de un en trop .
Pourquoi se passe t'il :
Code:
combinaison = combinaison - (temp*pow(10,3)) - 1;
J'utilise Code::Block 10.05.
Merci pour votre aide
Kosen