Hello,

j'ai programmé le jeu du devin mais je me heurte à deux problèmes:

mon programme saute l'instruction getchar et exécute donc 2 fois:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
printf("L'ordinateur propose %d.\n", nbOrdi);
printf("Ce nombre est-il trop petit, trop grand ou le même que le vôtre?\n");
printf("(p ou P pour \"trop petit\", g ou G pour \"trop grand\", t ou T pour le même)\n");
Mais la seconde fois, pas de problème, réponse est lue (et ce, à chaque fois)

J'ai aussi un problème avec compteur qui affiche une valeur complètement farfelue (du style 21 alors qu'il n'y a eu que 5 essais, par exemple)

Je vous mets ici mon code (par contre, le programme se déroule jusqu'au bout)

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>
#define N 1000
#define MIN 0
#define MAX 1000
int tab [N];
int nb_pense;
 
void creationTableau();
int nbPense();
void jeu();
 
 
int main(void)
{
    creationTableau();
    jeu();
    return 0;
}
 
void creationTableau(){
    int i;
    for (i = 1; i <= 1000; i++){
        tab[i] = i;
    }
}
 
int nbPense(){
    printf("A quel nombre pensez-vous?\n");
    scanf ("%d", &nb_pense);
    return nb_pense;
}
 
void jeu()
{
    nb_pense = nbPense();
    int m;
    int debut = MIN;
    int fin = MAX;
    int nbOrdi;
    char reponse = '!';
    int compteur = 1;
    do
    {
        m = (debut + fin) / 2;
        nbOrdi = tab[m];
        printf("L'ordinateur propose %d.\n", nbOrdi);
        printf("Ce nombre est-il trop petit, trop grand ou le même que le vôtre?\n");
        printf("(p ou P pour \"trop petit\", g ou G pour \"trop grand\", t ou T pour le même)\n");
        reponse = getchar();
        if (reponse != 't' || reponse != 'T') compteur ++;
        if (reponse == 'p' || reponse == 'P')
        {
            debut = m + 1;
        } else if (reponse == 'g' || reponse == 'G')
        {
            fin = m - 1;
        } else if (reponse == 't' || reponse == 'T')
        {
            printf("C'était le bon nombre!\n");
            printf("Le nombre a été trouvé en %d essais.\n", compteur);
            break;
        }
    } while (debut <= fin && (reponse != 't' || reponse != 'T'));
}
Voyez-vous d'où viennent ces erreurs?

En vous remerciant par avance,
Johnny