Probleme dans un TP ( debutant )

kakashi-sensei -  
fikou13 Messages postés 16 Statut Membre -
Bonjour,
j'apprends a programmer , je suit des cours , en arrivant a un TP nommé plus ou moin qui est connu , j'ai voulu l'améliorer mais en éxecutant le programme , quand je tape le choix 1 ça entre dans une boucle infinie , je voudrai savoir ou est l'erreur et merci d'avance

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
const int MIN = 1;
int nombreEntre =0, nombreMystere=0, compteur =0,continuerPartie, MAX = 100, choixMenu=0, difficulte=0;
printf("\n\n==== Mar7aban bikom fi lo3bat syada mn ras l7m9 ===\n");
printf("****Menu Principal****\n");
printf("1.niveau de difficulte\n");
printf("2.About !\n");
scanf("%ld",&choixMenu);
if(choixMenu ==1){//si l'utilisateur choisi 1 il recoit la demande de difficultée
printf(" choisissez votre niveau de difficulte :\n");
printf("1. Faclie , entre 0 et 100 ");
printf("2. Moyen , entre 0 et 1000 ");
printf("3. difficile , entre 0 et 10000 ");
while (difficulte !=1 && difficulte !=2 && difficulte !=3)
{
switch (difficulte)// changement de MAX qui est lié a difficulte
{
case 1:
MAX =100;
break;
case 2:
MAX =1000;
break;
case 3:
MAX =10000;
break;
default:
printf(" sir tfella 3la mok dir 1 oula 2 oula 3\n");
}
}

do //boucle du recommencement de la partie
{
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
compteur=0;
do// boucle des choix de la partie
{
printf("dir nemra dyalk :");
scanf("%ld",&nombreEntre);
if ( nombreEntre > nombreMystere)
printf(" n9as azabi fin ghadi baghi tla3 lsma?\n");
else if ( nombreEntre < nombreMystere)
printf(" zid zid d zab nta din mok ta namra makatapehach?\n");
else
printf(" l3ez lik hanta l9itiha f %d d mou7awalat ^^\n ", compteur);
compteur++;
}while (nombreEntre != nombreMystere);
printf("tbri t3awd ola t9awd? ktab 1 ila briti t3awd o ktab 0 ila briti t9awd :");
scanf("%ld",&continuerPartie);
}while(continuerPartie);
}else if (choixMenu ==2)// 2eme choix du menu : about
printf(" had la3ba tsawbat f 2009 copyright by haytam 3o9o9 tawzi3 wa tab3 ma7foda li mcha dar chi copie lah i3ti lmmo lghara9 , netmenna tkon l3ba 3jbatkom sinn lhla ij3alha bach t3jb mkom\n");
else
printf(" sir 3i9 3la mmok\n ");
system("PAUSE");
return 0;
}

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Dans t'as boucle while tu as oublié de mettre scanf("%ld",&difficulte);
1
adns Messages postés 1152 Statut Membre 153
 
bonjour

tu ne demande pas a l'utilisateur la difficulté qu'il veux donc ta variable difficulté reste a 0 et ta boucle ne s'arrête donc jamais

Juste après ton while ajoute ca
scanf("%ld",&difficulte);

Adns
1
kakashi-sensei
 
j'ai remarqué que je pouvais aussi la mettre avant while , et ça a marché ! c'est quoi la différence?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Si tu le mets avant le while tu rentreras dans une boucle infinie si tu mets autre chose que 1, 2, ou 3
Il faut donc que tu le mettes après...
0
kakashi-sensei > KX Messages postés 19031 Statut Modérateur
 
mais ça a marché même avant while
0
KX Messages postés 19031 Statut Modérateur 3 020 > KX Messages postés 19031 Statut Modérateur
 
Avec le code de ce matin, si tu le mets avant :
scanf("%ld",&difficulte);
while (difficulte !=1 && difficulte !=2 && difficulte !=3)
{
switch (difficulte)// changement de MAX qui est lié a difficulte
{
Si la valeur de "difficulte" ne vaut ni 1, ni 2, ni 3, la boucle sera infinie !
Il faut que la condition évaluée puisse devenir fausse à un moment, et pour ça il faut que tu place ton scanf à l'intérieur de la boucle :
while (difficulte !=1 && difficulte !=2 && difficulte !=3)
{
scanf("%ld",&difficulte);
switch (difficulte)// changement de MAX qui est lié a difficulte
{
Quand tu testes un programme il faut que tu testes aussi les cas qui posent problème.
Par exemple, il faut que testes ce que donne le programme lorsque tu rentres une difficulté de valeur 4.
Normalement il devrait t'afficher " sir tfella 3la mok dir 1 oula 2 oula 3" et te redemander la valeur (à condition que ton scanf ai bien été placé à l'intérieur de la boucle)
0
kakashi-sensei > KX Messages postés 19031 Statut Modérateur
 
hahaha c'est la prison assuré si on copie :p
merci beaucoup j'ai compris maintenant
0
fikou13 Messages postés 16 Statut Membre
 
Bonjour
j'ai peur que c'est dû aux prières que t'as fait pour celui ou celle qui copie ton programme

printf(" had la3ba tsawbat f 2009 copyright by haytam 3o9o9 tawzi3 wa tab3 ma7foda li mcha dar chi copie lah i3ti lmmo lghara9 , netmenna tkon l3ba 3jbatkom sinn lhla ij3alha bach t3jb mkom\n");

hihi

la réponse vous a déja été fourni
bon aprentissage mon vieux
-1
j'aime le français
 
Ce n'est pas parce que tu ne comprends pas la langue de `kakashi-sensei` qu'il faut te permettre de s'en moquer.

Regarde ce que tu as écrit avant de critiquer :
j'ai peur que ce ne soit dû aux prières que tu ais faites

Et puis franchement, ton message n'est d'aucune utilité, il ne fait pas avancer le problème.
Apprends à te servir du forum avant de poster n'importe quoi !
0
fikou13 Messages postés 16 Statut Membre > j'aime le français
 
désolé mais je me suis pas moqué de lui:
j'ai très bien compris ce qu'il a écrit car je parle la même langue que lui
en plus, toi le Grand Monsieur qui sait tout, contrairement à toi, le français n'est pas ma langue préférée,

alors , un peu de respect stp
0