Probleme dans un TP ( debutant )

Fermé
kakashi-sensei - 30 juin 2009 à 03:07
fikou13 Messages postés 13 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 22 avril 2010 - 30 juin 2009 à 18:46
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 juin 2009 à 09:10
Dans t'as boucle while tu as oublié de mettre scanf("%ld",&difficulte);
1
adns Messages postés 1094 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 27 mars 2012 153
30 juin 2009 à 10:03
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
30 juin 2009 à 15:54
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 juin 2009 à 15:56
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
30 juin 2009 à 16:08
mais ça a marché même avant while
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
30 juin 2009 à 16:21
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
30 juin 2009 à 16:46
hahaha c'est la prison assuré si on copie :p
merci beaucoup j'ai compris maintenant
0
fikou13 Messages postés 13 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 22 avril 2010
30 juin 2009 à 16:21
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
30 juin 2009 à 16:37
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 13 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 22 avril 2010 > j'aime le français
30 juin 2009 à 18:46
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