Probleme dans mon programme

Résolu/Fermé
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - Modifié par farreneit le 9/06/2013 à 13:27
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 15 juin 2013 à 11:30
Bonjour,
J'ai mon programme qui me fais chercher un nombre.
J'ai voulu rajouté une boucle pour demander de rejouer mais cela ne marche pas.
Aidez moi s'il vous plait.
Le programme :


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{

int nombreMystere = 0, nombre = 0;
const int MAX = 2, MIN = 2;
int reponse = 0, oui = oui;

do
{

// Génération du nombre aléatoire

srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

/* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */


do
{
// On demande le nombre
printf("Trouve le nombre ! ");
scanf("%d", &nombre);

// On compare le nombre entré avec le nombre mystère

if (nombreMystere > nombre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombre)
printf("C'est moins !\n\n");
else
printf ("Bravo, t'as trouve le nombre !!!\n\n");
} while (nombre != nombreMystere);
printf("Tu veux rejouer ?\n");
scanf("%d", &reponse);
} while (reponse != oui);



return 0;
}


Cordialement,
farreneit
PS: pour essayé de trouvé l'erreur en évitant de recherché le nombre a chaque fois j'ai mis qu'il soit entre 2 et 2. C'est donc 2.

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
9 juin 2013 à 14:15
Bonjour,

srand(time(NULL));
A n'appeler qu'une seule fois. Il faut donc le sortir de la boucle do while.

int reponse = 0, oui = oui;
scanf("%d", &reponse);
} while (reponse != oui);

Tu définies la variable oui que tu initialises à oui. Donc la variable est mal définie : la valeur peut être n'importe quoi.
L'utilisateur rentre une valeur pour la variable reponse. Et la boucle continuera tant qu'il ne tape pas la valeur de la variable oui que tu ne connais pas.

Fais plutôt : int oui = 1;
...
printf("Tu veux rejouer ? Tape 1 pour Oui\n");
scanf("%d", &reponse);
} while (reponse == oui);

Note : la prochaine fois, mets ton code entre les balises "code" (bouton <> à droite du bouton S "souligné)) plutôt qu'en italique.

Cdlt,
1
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
9 juin 2013 à 14:56
Merci beaucoup et desole pour l'italique.
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
9 juin 2013 à 19:56
Cela a marché.
Mais maintenant j'aimerai laissé l'utilisateur choisir son niveau, mais il me dis que je redefinnis MIN et MAX :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{

    // Génération du nombre aléatoire

    srand(time(NULL));
     do
    {

    int nombreMystere = 0, nombre = 0;
    int niveau = 0;
    printf("Bienvenue, choisit ton niveau : \n - 1 pour facile\n - 2 pour moyen\n - 3 pour difficile\n\n");
    scanf("%d", &niveau);

    if (niveau == 1);
        const int MAX = 0, MIN = 100;
    else if (niveau == 2);
        const int MAX = 0, MIN = 1000;
    else (niveau == 3);
        const int MAX = 0, MIN = 10000;

    int reponse = 0, oui = 1;
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

    /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */


    do
    {
        // On demande le nombre
        printf("Trouve le nombre ! ");
        scanf("%d", &nombre);

        // On compare le nombre entré avec le nombre mystère

        if (nombreMystere > nombre)
            printf("C'est plus !\n\n");
        else if (nombreMystere < nombre)
            printf("C'est moins !\n\n");
        else
            printf ("Bravo, t'as trouve le nombre !!!\n\n");
    } while (nombre != nombreMystere);
        printf("Tapez 1 pour rejouer");
            scanf("%d", &reponse);
    } while (reponse == oui);



    return 0;
}

Cordialement,
farreneit
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
9 juin 2013 à 20:40
if (niveau == 1);
else if (...);

Pas de ; après les conditions. Sinon l'instruction suivante n'est pas conditionnée.

Tu devrais mieux définir une fois pour toute min et max :
int min, max; /*juste avant srand(...);*/
Et dans les if /else, tu mets min=...; max=...;
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
10 juin 2013 à 19:03
j'ai essayé ceci mais en vain ...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{

    // Génération du nombre aléatoire
    const int MAX = 100, MIN = 0;
    srand(time(NULL));
     do
    {

    int nombreMystere = 0, nombre = 0;
    int niveau = 0;
    int reponse = 0, oui = 1;
    int min = 0, max = 0;



    printf("Bienvenue, choisit ton niveau : \n - 1 pour facile\n - 2 pour moyen\n - 3 pour difficile\n\n");
    scanf("%d", &niveau);

    if (niveau == 1)
        min = 0, max = 100;
    else if (niveau == 2)
        min = 0, max = 1000;
    else (niveau == 3)
        min = 0, max = 1000;


    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

    /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */


    do
    {
        // On demande le nombre
        printf("Trouve le nombre ! ");
        scanf("%d", &nombre);

        // On compare le nombre entré avec le nombre mystère

        if (nombreMystere > nombre)
            printf("C'est plus !\n\n");
        else if (nombreMystere < nombre)
            printf("C'est moins !\n\n");
        else
            printf ("Bravo, t'as trouve le nombre !!!\n\n");
    } while (nombre != nombreMystere);
        printf("Tapez 1 pour rejouer");
            scanf("%d", &reponse);
    } while (reponse == oui);



    return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
10 juin 2013 à 19:37
Tu as mis const int MIN... Cela veut dire que tu ne peux plys modifier la valeur. Utilise simplement : int min, max;
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
10 juin 2013 à 19:47
Il me dit : error: 'else' without a previous 'if'.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
10 juin 2013 à 20:35
else (niveau == 3)
Ca n'existe pas. Soit c'est else (sinon), soit c'est else if (niveau==3) (sinon si niveau vaut 3).
T'aurais pu le voir ;-)
0