Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1490 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Booleen, if pour plus ou moins (c)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Booleen, if pour plus ou moins (c)

n°2221877
bizounours​14
Posté le 08-03-2014 à 15:16:15  profilanswer
 

Bonjour a vous, je débute dans la programmation, c'est tout frais je m'y suis mis il y à 3 jours sur mon temps libre.
J'ai donc suivi les cours d'Open Classroom, et arrivé a l'exercice du "plus ou moins" il nous propose de l'amélioré... (en ajoutant un compteur de coup, un système de niveau ect)  
J'ai donc fait le jeux, en ayant besoin d'un petit coups de pouce cependant (un doute sur la manière de procéder) mais maintenant il fonctionne !
 
Donc pour la sélection du mode 1 ou 2 joueurs, il conseil d'utilisé des booleens !
 
J'ai donc mon code qui donne ça :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5.     int nombreInconnu = 0, nombreEntree = 0, coups = 0;
  6.     const int MAX = 100, MIN = 1;
  7.     srand(time(NULL));
  8.     nombreInconnu = (rand() % (MAX - MIN + 1)) + MIN;
  9. do
  10. {
  11.     coups++;
  12.     printf("Quel est le nombre inconnu ?\n" );
  13.     scanf("%d", &nombreEntree);
  14.     if (nombreEntree < nombreInconnu)
  15.         printf("C'est plus !\n" );
  16.     else if(nombreEntree > nombreInconnu)
  17.         printf("C'est moins !\n" );
  18.     else
  19.         printf("Vous avez gagnez en %d coups !", coups);
  20. } while (nombreEntree != nombreInconnu);
  21.     return 0;
  22. }


 
 
Maintenant j'aimerais y ajouter ce fameux mode 1 ou 2 joueurs, et là ça bloque, je pensais faire :

Code :
  1. int joueur_1 = 1, joueur_2 = 0;
  2.     if (joueur_1)
  3.         int nombreInconnu = 0, nombreEntree = 0, coups = 0;
  4.         const int MAX = 100, MIN = 1;
  5.         srand(time(NULL));
  6.         nombreInconnu = (rand() % (MAX - MIN + 1)) + MIN;
  7.     else
  8.         int nombreInconnu = 0, nombreEntree = 0, coups = 0;
  9.         int MAX = 0, MIN = 1;
  10.         printf("Choisir le nombre max :\n" );
  11.         scanf("%d", &MAX);


 
Mais visiblement int ne fonctionne pas après un if ?
 
Je voudrais, si je joueur choisis le mode solo, que l'ordi tire un nombre au hasard, si le joueur choisis le mode versus, que l'utilisateur choisisse un nombre max !

mood
Publicité
Posté le 08-03-2014 à 15:16:15  profilanswer
 

n°2221879
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 08-03-2014 à 16:40:49  profilanswer
 

Je vois un problème dans ton code: Il faut que tu entoures le contenu du "if" et du "else" par les accolades. En l'absence de ces accolades, seule la première ligne de chaque bloc est considéré comme étant dans la condition.
 
Du coup dans ton premier code ça fonctionne parce qu'il n'y a qu'une ligne, par contre dans ton seconde j'imagine que le compilateur doit te jeter parce que ton if et ton else sont séparés par des instructions qui n'ont rien à faire là
 
Donc:
 

Code :
  1. int joueur_1 = 1, joueur_2 = 0;
  2.     if (joueur_1)
  3.     {
  4.         int nombreInconnu = 0, nombreEntree = 0, coups = 0;
  5.         const int MAX = 100, MIN = 1;
  6.         srand(time(NULL));
  7.         nombreInconnu = (rand() % (MAX - MIN + 1)) + MIN;
  8.     }
  9.     else
  10.     {
  11.         int nombreInconnu = 0, nombreEntree = 0, coups = 0;
  12.         int MAX = 0, MIN = 1;
  13.         printf("Choisir le nombre max :\n" );
  14.         scanf("%d", &MAX);
  15.     }

Message cité 1 fois
Message édité par WiiDS le 08-03-2014 à 16:41:56

---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2221890
bizounours​14
Posté le 08-03-2014 à 20:21:48  profilanswer
 

WiiDS a écrit :

Je vois un problème dans ton code: Il faut que tu entoures le contenu du "if" et du "else" par les accolades. En l'absence de ces accolades, seule la première ligne de chaque bloc est considéré comme étant dans la condition.
 
Du coup dans ton premier code ça fonctionne parce qu'il n'y a qu'une ligne, par contre dans ton seconde j'imagine que le compilateur doit te jeter parce que ton if et ton else sont séparés par des instructions qui n'ont rien à faire là


 
Yes, dans le cours ça y est, mais je ne sais pas pourquoi j'ai été amené à les enlever, et je n'ai pas pensé a les remettre !
 
Bon, mais du coup je me retrouve avec un autre problème, la valeur max ici : ( j'ai modifié le code pour éviter les booleens )

Code :
  1. if (choix_1 == 1) // joueur solo, nombre aleatoire.
  2.         {
  3.         const int MAX = 100, MIN = 1;
  4.         srand(time(NULL));
  5.         nombreInconnu = (rand() % (MAX - MIN + 1)) + MIN;
  6.         }
  7.     else if (choix_1 == 2) // mode versus, 1 joueur doit choisir un nombre maxi.
  8.         {
  9.         int MAX = 0, MIN = 1;
  10.         printf("Choisir le nombre max :\n" );
  11.         scanf("%d", &MAX);
  12.         }


 
me laisse la valeur a 0, est-ce que c'est du au fait qui apparaisse dans la condition if ? (malgré le faite que normalement elle ne doit pas être prise en compte ?)

n°2221891
Farian
Posté le 08-03-2014 à 21:11:56  profilanswer
 

Bonjour !
 
Vous déclarez la valeur dans la boucle, donc elle est perdue une fois que vous sortez de cette boucle (et si vous avez déclaré une variable avec le même nom à l'extérieur de cette boucle, cette variable ne sera pas modifiée.
 
Bonne continuation !

n°2221893
bizounours​14
Posté le 08-03-2014 à 22:10:22  profilanswer
 

Farian a écrit :

Bonjour !
 
Vous déclarez la valeur dans la boucle, donc elle est perdue une fois que vous sortez de cette boucle (et si vous avez déclaré une variable avec le même nom à l'extérieur de cette boucle, cette variable ne sera pas modifiée.
 
Bonne continuation !


 
Vous parlez de la boucle while du premier code ? si oui, non, la valeur est déclaré avant cette boucle, sinon, comment je peut contourner ça ? Etant donnée qu'il faut que ce soit, soit l'un, soit l'autre système de génération du nombre a trouver ?

n°2221894
Farian
Posté le 08-03-2014 à 22:15:10  profilanswer
 

Non, je parle de celle du if : les accolades forment un bloc dans lequel on peut déclarer des variables qui ont comme durée de vie le bloc, et qui masquent éventuellement des variables de même nom qui ont été déclarées en dehors du bloc.
 
(Erreur de ma part, j'ai parlé de boucle alors que je voulais parler de bloc :) )
 
Bonne continuation !

n°2221897
bizounours​14
Posté le 08-03-2014 à 22:34:43  profilanswer
 

Farian a écrit :

Non, je parle de celle du if : les accolades forment un bloc dans lequel on peut déclarer des variables qui ont comme durée de vie le bloc, et qui masquent éventuellement des variables de même nom qui ont été déclarées en dehors du bloc.
 
(Erreur de ma part, j'ai parlé de boucle alors que je voulais parler de bloc :) )
 
Bonne continuation !


 
Je comprend en fait la valeur de max est mémorisé tant qu'on ne sort pas du "else if" en gros, une fois sorti il redevient 0, j'en déduit donc que ce n'est pas la bonne méthode pour arriver a mes fin, ou ça l'est mais demande plus de réflexion ?

n°2221898
Farian
Posté le 08-03-2014 à 22:51:31  profilanswer
 

C'est tout à fait ça, si la variable est déjà déclarée en dehors, il suffit de ne pas la redéclarer, et vous la modifiez dans le if et le else.
 
J'espère être clair et bien comprendre vos interrogations :)

n°2221903
bizounours​14
Posté le 08-03-2014 à 23:40:30  profilanswer
 

Tout a fait, a un détail près :  
 
La variable MAX n'est pas déclarer avant, mais uniquement en aléatoire sur le IF, et en manuel sur le else if !
 
Je posterais le code complet demain ce sera plus clair ;)

n°2221907
bizounours​14
Posté le 09-03-2014 à 12:18:08  profilanswer
 

Donc comme je disais :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6.     int choix_1 = 0, coups = 0, nombreInconnu = 0, nombreEntree = 0;
  7.     printf("Selectionnez le nombre de joueur :\n" );
  8.     printf("1. 1 joueur\n" );
  9.     printf("2. 2 joueurs\n" );
  10.     scanf("%d", &choix_1);
  11.     printf("Vous avez choisis le mode %d joueur(s)\n\n", choix_1);
  12. /* Ici si le joueur choisis le mode solo, alors la machine choisis un nombre.
  13. sinon si l'utilisateur choisis le mode versus, alors un des joueurs doit pouvoir choisir un nombre !*/
  14.     if (choix_1 == 1)
  15.         {
  16.         const int MAX = 100, MIN = 1;
  17.         srand(time(NULL));
  18.         nombreInconnu = (rand() % (MAX - MIN + 1)) + MIN;
  19.         }
  20.     else if (choix_1 == 2)
  21.         {
  22.         int MAX = 0, MIN = 1;
  23.         printf("Choisir le nombre max :\n" );
  24.         scanf("%d", &MAX);
  25.         }
  26. do
  27. {
  28.     coups++;
  29.     printf("Quel est le nombre inconnu ?\n" );
  30.     scanf("%d", &nombreEntree);
  31.     if (nombreEntree < nombreInconnu)
  32.         printf("C'est plus !\n" );
  33.     else if(nombreEntree > nombreInconnu)
  34.         printf("C'est moins !\n" );
  35.     else
  36.         printf("Vous avez gagnez en %d coups !", coups);
  37. } while (nombreEntree != nombreInconnu);
  38.     return 0;
  39. }


 
Elle n'est donc logiquement déclarée qui si "IF" ou "ELSE IF"
Le problème vient donc juste que la valeur s'efface a moment de sortir du bloc ?
 
Mais si les instructions sont oubliées une fois sortie du bloc, pourquoi le mode solo fonctionne ? J'ai du rater un truc, mais j'ai beau chercher je ne vois pas pourquoi ça fonctionne pour le choix 1, et pas le 2 ?
 

mood
Publicité
Posté le 09-03-2014 à 12:18:08  profilanswer
 

n°2221909
Je@nb
Kindly give dime
Posté le 09-03-2014 à 13:45:50  profilanswer
 

Code :
  1. else if (choix_1 == 2)
  2.         {
  3.         int MAX = 0, MIN = 1;
  4.         printf("Choisir le nombre max :\n" );
  5.         scanf("%d", &MAX);
  6.         }


 
Pk tu veux qu'il choisisse le nombre max ? Il faut qu'il choisisse le nombre inconnu non ?
Et mettre &nombreinconnu à la place de &MAX
 
Le premier choix marche parce que la variable nombreinconnu est déclarée globalement en haut.
Le deuxième non parce que la valeur de MAX est juste connue dans ton bloc.
Il faudrait le sortir et le mettre global

n°2221913
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 09-03-2014 à 18:12:27  profilanswer
 

Je pense que l'idée de son jeu, c'est de choisir une intervalle dans laquelle le nombre inconnu sera choisi, d'où la lecture d'un int pour set le max


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2221926
bizounours​14
Posté le 10-03-2014 à 00:51:24  profilanswer
 

Je@nb a écrit :


 
Pk tu veux qu'il choisisse le nombre max ? Il faut qu'il choisisse le nombre inconnu non ?
Et mettre &nombreinconnu à la place de &MAX
 
Le premier choix marche parce que la variable nombreinconnu est déclarée globalement en haut.
Le deuxième non parce que la valeur de MAX est juste connue dans ton bloc.
Il faudrait le sortir et le mettre global


 
Raaaaah, je m'en veut de ne pas y avoir pensé plus tôt  :kaola: effectivement ça devrais fonctionner  :hello:  
 
 

WiiDS a écrit :

Je pense que l'idée de son jeu, c'est de choisir une intervalle dans laquelle le nombre inconnu sera choisi, d'où la lecture d'un int pour set le max


Ca c'est pour la 3eme optimisation, en mode solo, le joueur peut choisir 3 niveau de difficultés, mais j'y suis pas encore  :D  
 

n°2222042
bizounours​14
Posté le 10-03-2014 à 20:26:59  profilanswer
 

Bon bah voilà, les 3 niveaux de difficultés sont réglé aussi :)
 
Un grand merci a vous du coup de pouce  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Booleen, if pour plus ou moins (c)

 

Sujets relatifs
[PHP/JAVA] Calendrier avec menu avec choix booléen sur chaque jourFonction qui retourne un booléen
Booleen sur Moteur de Recherche ... c'est du SQL ?Random sur un tableau de booléen !
problème de booléenTaille en mémoire d'un booléen
Probleme pour retourner un booleenMarquage d'une catégorie d'objet : interface vide ou flag booleén ?
reseau neurones - bitmap -> un vecteur de booleenDefinir un type booléen en C
Plus de sujets relatifs à : Booleen, if pour plus ou moins (c)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR