Je suis en train de réaliser le jeux du plus amélioré du cours sur le langage C de M. Nebra.
Après plusieurs tentatives, je ne réussi toujours pas à y ajouter le choix de la difficulté.
En effet, lorsque je lance le programme, une fois que le joueur entre le choixDifficulte, le programme s'arrête.
Pourriez-vous m'indiquer ce qui cloche dans mon programme s'il vous plait ?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nombreMystere = 0, nombreEntre = 0, choixDifficulte = 0, nombreMax = 100;
const int MIN = 1;
srand(time(NULL));
printf("\n");
printf("\t!!!!!-------------------LE JEUX DU PLUS OU MOINS--------------------!!!!!\n\n\n");
// Explication du jeux.
printf("\tLe but du jeux est de deviner le nombre mystere en un minimum de tours\n\n");
// Choix de la difficulté
printf("\tChoisi le niveau de difficulte de la partie :\n\n");
printf("\t\t1. Facile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
printf("\t\t1. Moyen\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
printf("\t\t1. Difficile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
// Le joueur entre son niveau de difficulte. En fonction de son choix, le programme ajuste la variable nombreMax.
do
{
printf("\tVotre choix : ");
scanf("%d", choixDifficulte);
switch(choixDifficulte)
{
case 1:
nombreMax = 100;
nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
break;
case 2:
nombreMax = 1000;
nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
break;
case 3:
nombreMax = 10000;
nombreMystere = (rand() % (nombreMax - MIN +1)) + MIN;
break;
}
}
while(choixDifficulte < 1 || choixDifficulte > 3);
do
{
printf("\tEntre un nombre :");
scanf("%d", &nombreEntre);
printf("\n\n");
if(nombreEntre < nombreMystere)
{
printf("C'est plus !\n");
printf("Essaie encore !\n\n");
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moins !\n");
printf("Essaie encore !\n\n");
}
else
{
printf("Felicitation !!! Tu as trouve le nombre mystere !!\n");
printf("Le nombre mystere est bien le %d !", nombreMystere);
}
}
while (nombreEntre != nombreMystere);
return 0;
}
A la ligne 36, tu as oublié tu as oublié le "&" devant "choixDifficulte"
Tu devrais donc plutôt écrire :
scanf("%d", &choixDifficulte);
//au lieu de :
scanf("%d", choixDifficulte);
Sinon, de la ligne 23 à 30, tu as écris :
printf("\t\t1. Facile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
printf("\t\t1. Moyen\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
printf("\t\t1. Difficile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
//au lieu de
printf("\t\t1. Facile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 100\n\n");
printf("\t\t2. Moyen\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 1 000\n\n");
printf("\t\t3. Difficile\n");
printf("\t\tLe nombre mystere sera compris entre 1 et 10 000\n\n");
//c'est juste les chiffres que tu avais mis à 1
Bonne fin de journée
- Edité par Le_Wasabi_Ca_Pik' 16 juin 2019 à 18:01:12
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-
Il faut que tu apprennes à détecter les erreurs. C'est une enquête, parfois une longue enquête. Il y a trois étapes : 1° situer l'erreur (à quelle ligne ?), 2° comprendre pourquoi c'est une erreur, 3° rectifier.
Là, par exemple, tu dis que le programme s'arrête. En fait, soit il s'arrête vraiment juste après la saisie (interruption), soit c'est juste qu'il ne rentre pas dans les deux boucles do... while. Tu peux le vérifier en ajoutant une ligne de contrôle dans chacune des deux boucles, genre :
printf("Coucou 1 !\n") ;
S'il n'affiche pas les « coucous », c'est qu'en effet il ne va pas dans les deux boucles. Mais si ajoutes une ligne similaire juste avant le « return 0 », tu verras qu'elle s'affiche, elle : ça prouve que le programme ne s'interrompt pas, c'est juste qu'il ne rentre pas dans les deux boucles. Pour savoir pourquoi, il faut afficher la valeur qui sert au test d'entrée, c'est-à-dire choixDifficulte. Donc juste avant la première boucle (et après la saisie), tu mets :
Merci pour avoir détecter l'erreur, c'est très sympa !
Pour robun
Merci beaucoup pour ces conseils, je ne connaissais pas ces méthodes pour détecter les erreurs. Cela va m'être très utile pour continuer ma progression.
- Edité par Novice_123 16 juin 2019 à 19:55:09
Cours langage C de M. Nebra
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
"Il faut toujours viser la lune, car même en cas d'échec on atterit dans les étoiles". -Oscar Wilde-