Bonjour. Je suis en train de réaliser l'activité du "plus ou moins" dans le cours de programmation C de Monsieur Nebra. J'ai un souçi : j'ai bien créé la structure, mis le compteur de coup, proposé un niveau de difficulté. mais lorsque je sélectionne un niveau de difficulté ( 1, 2 ou 3) le programme...plante ! Pouvez vous m'aider ? merci.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv)
{
int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
int MAX = 100, MIN = 1;
// generation du nombre au hasard
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("###############\n");
printf("Plus ou moins ?\n");
printf("###############\n\n");
do{
do // structure du jeu
{
do{
printf("#####################################\n");
printf("Choisissez votre niveau de difficulte\n");
printf("1.Niveau facile (de 1 a 100)\n");
printf("2. Niveau moyen (de 1 a 1000\n");
printf("3.Niveau difficile (de 1 a 10000\n ");
printf("#####################################\n\n");
scanf("%d, &niveau");
if ( niveau == 1)
{
MAX = 100;
printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
}
else if ( niveau == 2)
{
MAX = 1000;
printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
}
else if ( niveau == 3)
{
MAX = 10000;
printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
}
else
{
printf(" Je n'ai pas compris...reessayer !\n\n");
}
} while ( niveau != 1 && niveau != 2 && niveau != 3);
printf("Quel est le nombre mystere ?\n");
scanf("%d", &nombreEntre);
tentatives++;
if (nombreEntre<nombreMystere)
printf("c'est plus !");
else if (nombreEntre>nombreMystere)
printf("c'est moins !");
else
printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
} while ( nombreEntre != nombreMystere);
printf("####################################\n\n");
printf("Voulez-vous faire une autre partie ?\n\n");
printf("1. Oui, avec plaisir !\n\n");
printf("2. Non merci, c'est gentil...\n\n");
printf("####################################\n\n");
scanf( "%d", &rejouer);
nombreEntre = 0;
if ( rejouer == 2)
{
printf("\n\nMerci d'avoir joue !\n\n");
}
else
printf("\n\nC'est reparti !\n\n");
}while ( rejouer == 1);
return 0;
}
Bonjour ! L'erreur est à la ligne 30. Tu as écrit :
scanf("%d, &niveau");
au lieu de :
scanf("%d", &niveau);
Sois attentif !
Remarque : le compilateur signalait le problème dans un warning, même sans les options particulières. Bon, il n'était pas très explicite, mais il forçait à aller regarder cette ligne de plus près.
Cela dit, il reste à corriger une erreur d'algorithme : tu as inversé la boucle où l'on demande de rejouer et celle où on demande de donner un nombre.
C'était donc ça. J'avais un autre souci, c'est que le menu de difficulté s'affichait à chaque coup. je suis parvenu à le corriger, mais j'ai toujours un souçi : le chiffre mystère ne change pas. j'ai fais 5 parties, le chiffre mystère restait 56. Une idée ? merci.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv)
{
int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
int MAX = 100, MIN = 1;
// generation du nombre au hasard
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("###############\n");
printf("Plus ou moins ?\n");
printf("###############\n\n");
do{
do{
printf("#####################################\n");
printf("Choisissez votre niveau de difficulte\n");
printf("1.Niveau facile (de 1 a 100)\n");
printf("2. Niveau moyen (de 1 a 1000\n");
printf("3.Niveau difficile (de 1 a 10000\n ");
printf("#####################################\n\n");
scanf("%d", &niveau);
if ( niveau == 1)
{
MAX = 100;
printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
}
else if ( niveau == 2)
{
MAX = 1000;
printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
}
else if ( niveau == 3)
{
MAX = 10000;
printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
}
else
{
printf(" Je n'ai pas compris...reessayez !\n\n");
}
} while ( niveau != 1 && niveau != 2 && niveau != 3);
do{
printf("Quel est le nombre mystere ?\n");
scanf("%d", &nombreEntre);
tentatives++;
if (nombreEntre<nombreMystere)
printf("c'est plus !");
else if (nombreEntre>nombreMystere)
printf("c'est moins !");
else
printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
} while ( nombreEntre != nombreMystere);
printf("####################################\n\n");
printf("Voulez-vous faire une autre partie ?\n\n");
printf("1. Oui, avec plaisir !\n\n");
printf("2. Non merci, c'est gentil...\n\n");
printf("####################################\n\n");
scanf( "%d", &rejouer);
nombreEntre = 0;
if ( rejouer == 2)
{
printf("\n\nMerci d'avoir joue !\n\n");
}
else
printf("\n\nC'est reparti !\n\n");
} while ( rejouer == 1);
return 0;
}
C'est normal : tu ne recharges le nombre mystère qu'une fois au tout début, à la ligne 13. Il faudrait mettre la ligne 13 au début de chaque nouvelle partie, donc juste après le choix du niveau.
Ok ça va déja beaucoup mieux. Merci pour vos conseils. Dernière question ( c'est promi ) . En mode facile, il arrive que le chiffre mystère dépasse 100. Comment est-ce possible ? j'ai pourtant spécifié le max pour chaque niveau ?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv)
{
int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
int MAX;
const int MIN =1;
// generation du nombre au hasard
printf("###############\n");
printf("Plus ou moins ?\n");
printf("###############\n\n");
do{
do{
printf("#####################################\n");
printf("Choisissez votre niveau de difficulte\n");
printf("1.Niveau facile (de 1 a 100)\n");
printf("2. Niveau moyen (de 1 a 1000)\n");
printf("3.Niveau difficile (de 1 a 10000)\n ");
printf("#####################################\n\n");
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
scanf("%d", &niveau);
if ( niveau == 1)
{
MAX = 100;
printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
}
else if ( niveau == 2)
{
MAX = 1000;
printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
}
else if ( niveau == 3)
{
MAX = 10000;
printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
}
else
{
printf(" Je n'ai pas compris...reessayez !\n\n");
}
} while ( niveau != 1 && niveau != 2 && niveau != 3);
do{
printf("Quel est le nombre mystere ?\n");
scanf("%d", &nombreEntre);
tentatives++;
if (nombreEntre<nombreMystere)
printf("c'est plus !");
else if (nombreEntre>nombreMystere)
printf("c'est moins !");
else
printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
} while ( nombreEntre != nombreMystere);
printf("####################################\n\n");
printf("Voulez-vous faire une autre partie ?\n\n");
printf("1. Oui, avec plaisir !\n\n");
printf("2. Non merci, c'est gentil...\n\n");
printf("####################################\n\n");
scanf( "%d", &rejouer);
tentatives = 0;
if ( rejouer == 2)
{
printf("\n\nMerci d'avoir joue !\n\n");
}
else if ( rejouer==1)
{
printf("\n\nC'est reparti !\n\n");
}
else
{
printf("mauvaise réponse...tant pis !");
}
} while ( rejouer == 1);
return 0;
}
Bonjour ! je me remet à l'entrainement après quelques mois d'arrêt, et je me rend compte que je retourne dans les mêmes travers. mon code compile, mais après le choix du niveau, il plante à nouveau. j'ai pourtant suivi vos conseils...pouvez vous me dire ou j'ai pu me tromper ? merci
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv)
{
int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
int MAX;
const int MIN =1;
// generation du nombre au hasard
printf("###############\n");
printf("Plus ou moins ?\n");
printf("###############\n\n");
do{
do{
printf("#####################################\n");
printf("Choisissez votre niveau de difficulte\n");
printf("1.Niveau facile (de 1 a 100)\n");
printf("2. Niveau moyen (de 1 a 1000)\n");
printf("3.Niveau difficile (de 1 a 10000)\n ");
printf("#####################################\n\n");
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
scanf("%d", &niveau);
if ( niveau == 1)
{
MAX = 100;
printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
}
else if ( niveau == 2)
{
MAX = 1000;
printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
}
else if ( niveau == 3)
{
MAX = 10000;
printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
}
else
{
printf(" Je n'ai pas compris...reessayez !\n\n");
}
} while ( niveau != 1 && niveau != 2 && niveau != 3);
do{
printf("Quel est le nombre mystere ?\n");
scanf("%d", &nombreEntre);
tentatives++;
if (nombreEntre<nombreMystere)
printf("c'est plus !");
else if (nombreEntre>nombreMystere)
printf("c'est moins !");
else
printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
} while ( nombreEntre != nombreMystere);
printf("####################################\n\n");
printf("Voulez-vous faire une autre partie ?\n\n");
printf("1. Oui, avec plaisir !\n\n");
printf("2. Non merci, c'est gentil...\n\n");
printf("####################################\n\n");
scanf( "%d", &rejouer);
tentatives = 0;
if ( rejouer == 2)
{
printf("\n\nMerci d'avoir joue !\n\n");
}
else if ( rejouer==1)
{
printf("\n\nC'est reparti !\n\n");
}
else
{
printf("mauvaise réponse...tant pis !");
}
} while ( rejouer == 1);
return 0;
}
je vois que vous avez réglé le problème. J'ai cependant remarqué qu'à la ligne 96, il y avait un accent aigu sur le "e" de "réponse", alors qu'on est en console.
Chez moi les accents en console ne posent aucun problème (Xubuntu), mais je crois bien que cela dépend de l'OS.
J'ai un tuto en stock qu'il faudra que je lise un jour d'ailleurs : https://openclassrooms.com/courses/mettez-des-accents-dans-vos-programmes-avec-le-type-wchar-t
Alors je peux faire la remarque inverse : il manque parfois des accents
Tant mieux pour toi.
Problème dans mon jeu "plus ou moins"
× 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.