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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

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 : Sélectionner tout - Visualiser dans une fenêtre à part
combinaison = combinaison - (temp*pow(10,3)) - 1;
J'utilise Code::Block 10.05.

Merci pour votre aide

Kosen