Tu as oublié d'utiliser l'éditeur de code (bouton </>, comme expliqué dans un des messages à lire d'abord). Je te suggère de vite rectifier ça pour éviter de te faire rouspéter...
Si rien ne s'affiche, ça pourrait être une boucle infinie. Voyons s'il y a des 'while'... Ah oui, rien que le premier :
merci je vais essayer ça. Ok j'ai enlever le while du début. Dorénavant mon programme affiche qlqch, mais uniquement jusqu'au scanf ou je demande quel niveau la personne veut, aprés ça plus rien ne s'affiche. En gros ça montre juste ça. Pourquoi l'ordinateur n'arrive pas à éxecuter le programme qui vient après le scanf ? J'ai pourtant déclarer ma variable choixniveau.
===option===
1:niveau facile
2:niveau moyens
3:niveau difficile
vous voulez quel niveau ?
voila la nouvelle version de mon code(l'autre j'avais mis le code en double mdr...)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int MAX=0, nombreEcrit=0, nombreMystere=0, continuerpartie=1, choixniveau=0;
1) Il ne fallait pas enlever le 'while' du début mais rectifier l'erreur (le point-virgule). (J'avais posé une question pour savoir si tu avais compris l'erreur. La première chose à faire aurait dû être de répondre à la question. Ce n'était pas une question pour être indiscret mais pour savoir s'il fallait que je donne des explications plus détaillées.)
2) C'est la deuxième fois que tu oublies de poster le code dans l'éditeur prévu à cet effet comme expliqué dans l'un des sujets à lire avant de poster.
3) Manifestement tu n'as pas compris l'erreur que j'avais signalée, du coup tu n'as pas vu qu'elle est reproduite plus loin, ce qui bloque à nouveau le programme :
while(nombreMystere!=nombreEcrit);
Pour info : le point-virgule est une erreur. Revois la syntaxe du 'while' pour bien comprendre. À cause de ce point-virgule, le programme boucle sur une instruction vide (et non sur le bloc qui suit), et la boucle est infinie puisque que l'instruction vide ne fait rien, en particulier ne modifie pas les variables de test de la condition. (Je crois que le 'while' suivant aussi est mal écrit.)
je vais aller réviser la syntase. Au sujet du point-virgule, vous dites que c,est une erreure mais dans le cours voila quel exemple on nous donne pour faire le jeu.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
int nombreMystere = 0, nombreEntre = 0;
const int MAX = 100, MIN = 1;
// 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("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
// On compare le nombre entré avec le nombre mystère
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
else
printf ("Bravo, vous avez trouve le nombre mystere !!!\n\n");
} while (nombreEntre != nombreMystere);
return 0;
}
il y a bien un point virgule après le while à la ligne 31, c'est pour cette raison que j'avais également mis un point-virgule dans le miens.
j'ai revue ma syntaxe du while et en effet, j'avais tort sur toute la ligne, merci de m'avoir remis sur le droit chemin, mais je viens de rencontrer un autre problème avec mon code. Lorsque je trouve le nombre mystere, le programme continue de me demander de mettre le nombre mystere. voila le code.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nbEcrit=0, nbMystere=0, continuePartie=1, choixDifficulter=0, MAX=0, compteur=0;
const int MIN=1;
printf("===option===\n");
printf("1:niveau facile entre 1 a 100\n");
printf("2:niveau moyen entre 1 a 1000\n");
printf("3:niveau difficile entre 1 a 10000\n");
printf("vous voulez quel niveau ?\n");
scanf("%d", &choixDifficulter);
do{
if(choixDifficulter == 1)
{
MAX=100;
printf("niveau facile\n");
}
else if(choixDifficulter == 2)
{
MAX=1000;
printf("niveau moyens\n");
}
else if(choixDifficulter == 3)
{
MAX=10000;
printf("niveau difficile\n");
}
do{
srand(time(NULL));
nbMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("quel est le nombre mystere ?\n");
scanf("%d", &nbEcrit);
if(nbMystere < nbEcrit)
printf("plus petit\n");
else if (nbMystere > nbEcrit)
printf("plus grand\n");
else
printf("bravo le nombre mystere est bien %d et vous avez reussie en %d tour\n", nbMystere, compteur);
compteur++;
}while(nbEcrit != nbMystere);
printf("voulez-vous faire une autre partie ?\n");
printf("1 pour OUI, 0 pour NON\n");
printf("votre choix ?\n");
scanf("%d", &continuePartie);
}while(continuePartie==1);
return 0;
}
Je vois un problème : tu réinitialises le nombre mystère à chaque tour de boucle. Il faut initialiser le nombre mystère et, ensuite, faire la boucle do... while. Les lignes 33-34 doivent être situées avant la boucle. (En fait la ligne 33 doit être située au tout début du programme.)
(Au fait, l'affichage du menu ne devrait-il pas se faire après le premier 'do' ? Sinon on jouera toujours avec le même niveau de difficulté. Mais c'est peut-être ce que tu as prévu ?)
2. les grandes parties étaient précédées par des commentaires
// choisir le niveau de difficulté
...
// tirer un nombre au hasard
...
// dérouler la partie
...
3. les parties étaient dans des fonctions séparées (mais ça c'est la faute du cours de merde qui donne des exemples trop longs avant d'avoir expliqué à quoi servent les fonctions).
- Edité par michelbillaud 20 février 2019 à 11:39:50
Merci !!! Grace à vous, mon programme fonctionne correctement et j'ai mis le menu dans le premier "do" et en effet c'est bien mieux comme ça. Je vais maintenant essayer de l'améliorer en ajoutant un mode deux joueur et en améliorant un peu mon menu. Pour l'indentation, je vais essayer d'en mettre dans mes futures programmes.
Voila le code fonctionnelle, je le mettrais à jour au fur et à mesure si vous aviez des idées à me donner pour l'améliorer, je suis ouvert.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int nbEcrit=0, nbMystere=0, continuePartie=1, choixDifficulter=0, MAX=0, compteur=0;
const int MIN=1;
srand(time(NULL));
do{
printf("===option===\n");
printf("1:niveau facile entre 1 a 100\n");
printf("2:niveau moyen entre 1 a 1000\n");
printf("3:niveau difficile entre 1 a 10000\n");
printf("vous voulez quel niveau ?\n");
scanf("%d", &choixDifficulter);
if(choixDifficulter == 1)
{
MAX=100;
printf("niveau facile\n");
}
else if(choixDifficulter == 2)
{
MAX=1000;
printf("niveau moyens\n");
}
else if(choixDifficulter == 3)
{
MAX=10000;
printf("niveau difficile\n");
}
nbMystere = (rand() % (MAX - MIN + 1)) + MIN;
do{
printf("quel est le nombre mystere ?\n");
scanf("%d", &nbEcrit);
if(nbMystere < nbEcrit)
printf("plus petit\n");
else if (nbMystere > nbEcrit)
printf("plus grand\n");
else
printf("bravo le nombre mystere est bien %d et vous avez reussie en %d tour\n", nbMystere, compteur);
compteur++;
}while(nbEcrit != nbMystere);
printf("voulez-vous faire une autre partie ?\n");
printf("1 pour OUI, 0 pour NON\n");
printf("votre choix ?\n");
scanf("%d", &continuePartie);
}while(continuePartie==1);
return 0;
}
Pour l'indentation, je vais essayer d'en mettre dans mes futures programmes.
Il ne faut pas essayer, il faut le faire, toujours. C'est tout.
1. tant que c'est du code pour toi, c'est ton problème (mais tu verras que ça aide).
2. quand tu nous le fais voir, ça nous pique les yeux. Tu prèfèrerais sans doute qu'on consacre nos neurones à t'aider plutot qu'à nous esquinter à chercher où sont les débuts et les fins de blocs ? Dans ce cas, ne nous complique pas la vie.
3. Dans tous les IDE décents, on peut remettre en forme le code automatiquement d'un coup d'un seul. Alors fais-le. Codeblocks / Format using AStyle.
- Edité par michelbillaud 21 février 2019 à 10:12:04
De toute façon la plupart des éditeurs font l'identation au fur et à mesure qu'on tape le code. Par exemple quand je tape une accolade ouvrante puis "entrée", il me décale de quatre espaces à droite.
Voila ce que ça donne, avec un remise en forme sommaire
indentation
commentaires pour structurer le code
choix de meilleurs noms de variables, déclaration là où on en a besoin
Tu avais deux problèmes avec ta variable compteur. Primo il faut la remettre à chaque partie, deuzio, son nom. Un nom de variable, ça n'indique pas son type (int unEntier), ni son rôle général (int compteur), mais de préférence son rôle dans le problème. Ici il s'agit de compter les tours, donc nombreDeTours.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int faireAutrePartie = 1;
srand(time(NULL));
do {
/*
* Choisir le niveau de difficulté
*/
int niveauDifficulte = 0;
const int MIN = 1;
int MAX = 0;
printf("===option===\n");
printf("1:niveau facile entre 1 a 100\n");
printf("2:niveau moyen entre 1 a 1000\n");
printf("3:niveau difficile entre 1 a 10000\n");
printf("vous voulez quel niveau ?\n");
scanf("%d", &niveauDifficulte);
if (niveauDifficulte == 1) {
MAX = 100;
printf("niveau facile\n");
} else if (niveauDifficulte == 2) {
MAX = 1000;
printf("niveau moyens\n");
} else if (niveauDifficulte == 3) {
MAX = 10000;
printf("niveau difficile\n");
}
/*
* Jouer la partie
*/
int nbMystere = (rand() % (MAX - MIN + 1)) + MIN;
int nombreDeTours = 0;
do {
printf("quel est le nombre mystere ?\n");
int essai;
scanf("%d", &essai);
if (nbMystere < essai) {
printf("plus petit\n");
} else if (nbMystere > essai) {
printf("plus grand\n");
} else {
printf("bravo le nombre mystere est bien %d "
"et vous avez reussi en %d tours\n",
nbMystere, nombreDeTours);
}
nombreDeTours++;
} while (essai != nbMystere);
/*
* Demander si on veut faire une autre partie
*/
printf("voulez-vous faire une autre partie ?\n");
printf("1 pour OUI, 0 pour NON\n");
printf("votre choix ?\n");
scanf("%d", &faireAutrePartie);
} while (faireAutrePartie == 1);
return 0;
}
- Edité par michelbillaud 21 février 2019 à 12:26:12
projet 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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent