Bonjour,
j'essaye de coder ce programme (écrit avec la boucle do while) :
http://openclassrooms.com/courses/apprenez-a-programmer-en-c/tp-plus-ou-moins-votre-premier-jeu
( cf correction)
avec la boucle while uniquement, mais lorsque je compile seulement une partie du programme est exécuté, tout jusqu'à while(..).
voici mon code :
#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;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
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);
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
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");
}
return 0;
}
Que faire ? merci d'avance ![]()
+ j'ai un autre soucis, j'arrive vraiment pas à trouver la solution (dans le même programme mais amélioré)
dans ce programme, à la fin lorsque l'utilisateur tape autre chose que 0 ou 1, je n'arrive pas à faire une boucle ou quelque chose qui ferait que tant qu'il marque autre chose que 0 ou 1, le programme dise "Tapez autre chose que 0 ou 1" ![]()
voici le code :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
int continuerPartie = 1, choix = 0;
printf("Hello !\n");
while(continuerPartie)
{
printf("Let's go !\n\n");
int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
const int MAX = 100, MIN = 1;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
nb_coup++;
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
} while (nombreEntre != nombreMystere);
printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");
scanf("%d", &choix);
printf("\n\n");
if(choix == 1)
{
continuerPartie = 1;
printf("---------------------\n\n");
printf("C'est reparti !\n");
}
else if(choix == 0)
continuerPartie = 0;
else
printf("Tapez uniquement 0 ou 1\n\n");
}
}Merci ![]()
Tu le dis toi même tu fais une boucle while pour vérifier si l'entrée est bonne après avoir demander la saisie
while (choix != 1 || choix != 0)
{
//ton message
}
if (choix == 1)
{
//...
}
else
{
//...
}
du coup ça donne ça mais ça ne marche pas
lorsque je rentre deux fois un nombre autre que 0 ou 1, ça plante ![]()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
int continuerPartie = 1, choix = 0;
printf("Hello !\n");
while(continuerPartie)
{
int MAX = 0, choixLevel = 0;
printf("Let's go !\n\n");
printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
scanf("%d", &choixLevel);
printf("\n");
switch(choixLevel)
{
case 1 :
printf("Vous avez selectionne le niveau 1\n");
MAX = 100;
break;
case 2 :
printf("Vous avez selectionne le niveau 2\n");
MAX = 1000;
break;
case 3 :
printf("Vous avez selectionne le niveau 3\n");
MAX = 10000;
break;
default :
printf("Veuillez taper uniquement 1, 2 ou 3\n");
}
int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
const int MIN = 1;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
nb_coup++;
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
} while (nombreEntre != nombreMystere);
printf("\n");
printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");
scanf("%d", &choix);
printf("\n");
while(choix != 0 || choix != 1)
{
printf("Tapez uniquement 0 ou 1.\n\n");
scanf("%d", choix);
printf("\n");
}
printf("\n\n");
if(choix == 1)
{
continuerPartie = 1;
printf("---------------------\n\n");
printf("C'est reparti !\n");
}
else if(choix == 0)
continuerPartie = 0;
}
}
Utilise un debuguer pour avoir ou ça plante précisément
en fait la boucle while s'execute que lorsque une condition est vrai. Et si on vois bien tu écris :
int nombreMystere= 0, nombreEntree = 0; Et selon ces deux valeurs affectés 0=0mbreMystere=NombreEntree donc le fait de dire nombreMystere != nombreEntree ça donne false. Donc la valeur de nombreMystere n'est pas egale à celle de nombreEntree pour qu'on entre dans la boucle, essaye un do while ça sera plus logique ![]()
tu peux gérer la continuation avec des bools comme : if(choix) ou if(choix == true) comme ça sera plus accessible ![]()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
int continuerPartie = 1, choix = 0;
printf("Hello !\n");
while(continuerPartie)
{
int MAX = 0, choixLevel = 0;
printf("Let's go !\n\n");
printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
scanf("%d", &choixLevel);
printf("\n");
switch(choixLevel)
{
case 1 :
printf("Vous avez selectionne le niveau 1\n");
MAX = 100;
break;
case 2 :
printf("Vous avez selectionne le niveau 2\n");
MAX = 1000;
break;
case 3 :
printf("Vous avez selectionne le niveau 3\n");
MAX = 10000;
break;
default :
printf("Veuillez taper uniquement 1, 2 ou 3\n");
}
int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
const int MIN = 1;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
nb_coup++;
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
} while (nombreEntre != nombreMystere);
printf("\n");
printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");
scanf("%d", &choix);
printf("\n");
do
{
printf("Tapez uniquement 0 ou 1.\n\n");
scanf("%d", &choix);
printf("\n");
}while(choix != 0 || choix != 1);
printf("\n\n");
if(choix == 1)
{
continuerPartie = 1;
printf("---------------------\n\n");
printf("C'est reparti !\n");
}
else if(choix == 0)
continuerPartie = 0;
}
}Donc j'ai mis une boucle do while comme tu m'as dit, mais ça marche toujours pas
+ Je comprends pas trop ce que tu dis là. Car j'ai même pas finis la 1ère partie du tuto sur Openclassroom, je suis au premier TP, donc je sais pas faire grand chose encore ![]()
Que faire ? ![]()
Merci pour ton aide
voilà un code que j'ai fait moi même analyse le. Pour la gestion des booléens, open classrooms traite ce sujet dans son cours
http://pastebin.com/9znmkpis
Merci encore AZIR2015, je vais essayer de me débrouiller avec ça mais par contre tu peux juste essayer de voir ce qui ne marche pas
Test le code, le jeu ne marche pas vraiment, enfin je sais pas comment expliquer ![]()
Merci ![]()
Mon code marche, j'ai bien testé tout les points.
Pour ton code je vais voir ![]()
Je parlais du tiens justement, moi ça plante ![]()
Voilà ce que ça donne avec le tiens, par exemple ici, même si je met 0, il me dit que "c'est moins" ![]()

Et aussi autre problème, avec code blocks, je sais pas si ça te fais ça aussi mais souvent quand je compile et j’exécute, deux fenêtre s'ouvre au lieu d'une et ça plante à moiter, je sais pas si tu vois ce que je veux dire/si t'as déjà eu ça ? + et avast se met à analyser ce que je viens exécuter etc. Si tu pouvais m'aider pour ça aussi ça serais cool ![]()
apparement tu n'as pas compris le truc ![]()
en fait s'il te dit que 50 c'est moins, essaye un nombre plus grand que 50
s'il te dit que 50 c'est plus bah essaye un nombre plus petit que 50 ![]()
j'utilise pas code blocks, j'utilise un editeur de texte + gcc pour compiler ![]()
Ok merci beaucoup ! Là j'ai pas le temps mais je testerais ça dans le semaine !
pas de problème ![]()
Ah ok
On s'est mal compris, quand je mettais c'est moins c'était dans le sens "Entre un nombre moins grand que celui que tu viens d'entrer".
^^
ah dans ce cas t'aurais pu écrire "ça doit être plus grand/petit" ![]()
Bonjour, Bon j'ai regarder ton code teste ca si c'est bon, et si oui regarde les difference mais ton code peut etre amélioré grandement.
int main ( int argc, char** argv )
{
int continuerPartie = 1, choix = 0;
printf("Hello !\n");
int MAX = 0;
int choixLevel = 0;
while(continuerPartie)
{
printf("Let's go !\n\n");
printf("Niveau 1, 2 ou 3 ? Tapez 1, 2 ou 3\n\n");
scanf("%d", &choixLevel);
switch(choixLevel)
{
case 1 :
printf("Vous avez selectionne le niveau 1\n");
MAX = 100;
break;
case 2 :
printf("Vous avez selectionne le niveau 2\n");
MAX = 1000;
break;
case 3 :
printf("Vous avez selectionne le niveau 3\n");
MAX = 10000;
break;
default :
printf("Veuillez taper uniquement 1, 2 ou 3\n");
break;
}
// pour sortir du while quand l'utilisateur a bien tape le bn num
if(choixLevel==1)
break;
if(choixLevel==2)
break;
if(choixLevel==3)
break;
}
int nombreMystere = 0, nombreEntre = 0,nb_coup = 0;
const int MIN = 1;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
do
{
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
nb_coup++;
if (nombreMystere > nombreEntre)
printf("C'est plus !\n\n");
else if (nombreMystere < nombreEntre)
printf("C'est moins !\n\n");
} while (nombreEntre != nombreMystere);
printf("\n");
printf ("Bravo, vous avez trouve le nombre mystere en %d coup(s) !!!\n\n\n", nb_coup);
printf("Voulez-vous faire une nouvelle partie ? Tapez 1 si Oui ou 0 si Non.\n\n");
scanf("%d", &choix);
printf("\n");
do
{
printf("Tapez uniquement 0 ou 1.\n\n");
scanf("%d", &choix);
printf("\n");
}while(choix != 0 || choix != 1);
printf("\n\n");
if(choix == 1)
{
continuerPartie = 1;
printf("---------------------\n\n");
printf("C'est reparti !\n");
}
else if(choix == 0)
continuerPartie = 0;
}