c'est pour savoire si vous pouvez m'aider j'arrive pas limiter le nombre de coups en joueur 1 il continue meme si le nombre de coup que je voulais et d'epasser et se meme si je fait un else if sa ne le lit pas et pour le deuxiem joueur il s'arret sans aficher la phrase que je voulais voici mon script
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main(int argc,char *argv[])
{
printf("==== PLUSOUMOIN ====\n\n");
int modeJoueur;
const int MAX = 100, MIN = 1;
int nombreMystere = 0 , nombreEntre = 0 , compteurDeCoups = 1;
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
switch (modeJoueur)
{
case 1:
srand(time(NULL));
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;
const int Yes = 1 , No = 0;
do
{
do
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else if (compteurDeCoups==10)
{
printf("Dommage vous avez perdue!\n");
printf("vous avez fais %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("%d.Continuer %d.Finire partie ?\n", Yes, No);
scanf("%d, %d", &Yes, &No);
printf("\n");
{
if (No)
{
printf("Merci d'avoire joue à bientôt !\n\n");
}
}
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("%d.Continuer %d.Finire partie ?\n", Yes, No);
scanf("%d %d", &Yes, &No);
printf("\n");
{
if (No)
{
printf("Merci d'avoire joue à bientôt !\n\n");
}
}
}
compteurDeCoups ++;
} while(nombreEntre != nombreMystere && compteurDeCoups!=10);
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 1;//Remis a 1
} while (Yes);
break;
case 2:
printf("Veuillez choisir un nombre entre 1 et 100 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
int compteurDeCoups = 10;
const int Oui = 1, Non;
do
{
do
{
printf("veulleiz saisr votre reponse !\n");
scanf("%d", &nombreEntre);
compteurDeCoups--;
if (nombreEntre>nombreMystere)
{
printf("C'est moins !\n");
printf("Il vous reste %d essai\n\n",compteurDeCoups);
}
else if (nombreEntre<nombreMystere)
{
printf("C'est plus !\n");
printf("Il vous reste %d essai !\n\n",compteurDeCoups);
}
else if (compteurDeCoups == 0)
{
printf("Perdu !");
}
else
{
printf("Bravo, vous avez trouvez le nombre mystère en %d coups !\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("%d.Continuer %d.Finire partie ?\n", Oui, Non);
scanf("%d, %d", &Oui, &Non);
printf("\n");
{
if (Non)
{
printf("Merci d'avoire joue à bientôt !\n\n");
}
}
}
} while (nombreEntre!=nombreMystere && compteurDeCoups!=0);
compteurDeCoups = 10;//Remis a 10
compteurDeCoups--;
printf("Veuillez choisir un nombre entre 1 et 100 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
}while (Oui);
break;
}
return 0;
}
j'utillise la langue C j'espaire que vous m'aiderai à reoudre se probleme
Merci d'avance et a bientôt
- Edité par ibrahim lebond 14 septembre 2017 à 9:25:14
Alors déjà considère que si tu compiles avec des erreurs que ton code ne marche pas même si c'est le cas.
Dans ton cas scanf ne peut pas écrire dans une variable constante.
Ensuite quand tu code essaies de faire ton code sur papier pour voir ce qu'il se passe vraiment et essayer de comprendre. Puisque par exemple quand tu fait :
while (Yes);
C'est comme si tu faisait
while (1);
Ce qui est une condition toujours vrais donc tu vas boucle inf.
Pour cela évite de faire plusieurs "do" c'est plus lisible (c'est ma vision personnelle), d'avoir un "while" et ce qu'il fait en dessous.
Ensuite évite de déclarer des variables a la volée quand tu en as besoin sauf dans des cas précis.
Alors je t'ai fait un truc qui marche normalement je te conseille de le regarder et de bien le relire pour etre sur de tout comprendre.
include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
int modeJoueur;
int nombreMystere = 0 , nombreEntre = 0;
const int MAX = 100, MIN = 1;
int Yes;
int compteurDeCoups = 0;
printf("==== PLUSOUMOIN ====\n\n");
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;
while (Yes)
{
while(nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?\n");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moins !\n\n");
}
else if (nombreEntre < nombreMystere )
{
printf("C'est plus !\n\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coup(s)\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1 : Continuer\t0 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue, vous n'avez plus de coups\n");
break;
}
compteurDeCoups++;
}
printf("Vous avez perdues\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 100 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <= 10)
{
printf("Veuillez saisir votre réponse !\n");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moins !\n");
printf("Il vous reste %d essai\n\n",compteurDeCoups);
}
else if (nombreEntre < nombreMystere)
{
printf("C'est plus !\n");
printf("Il vous reste %d essai !\n\n", 10 - compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo, vous avez trouvez le nombre mystère en %d coups !\n",compteurDeCoups);
}
compteurDeCoups++;
}
printf("Vous avez perdues\n");
printf("Souhaitez vous rejouer ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 10; //Remis a 10
}
}
return 0;
}
Si tu veut l’améliorer tu devrais faire comme je te l'ai dit et diviser ton code en plusieurs fonction.
Pour savoir comment faire je te conseille de regarder sur internet et si tu as un problèmes tu peut me demander
Merci Beaucoup grace a vous j'ai pu passer a la derniere amélioration
voici le script de la dernier amelioration qui et le niveau de dificulter jaimerai votre avis dessus
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main()
{
printf("==== PLUSOUMOIN ====\n\n");
int niveauxDeJeux;
int modeJoueur;
const int MAX = 100, MIN = 1;
int nombreMaximum = 500, nombreMinimum = 1;
int nombreMaxi = 1000, nombreMin = 1;
int nombreMystere = 0 , nombreEntre = 0 ;
int compteurDeCoups = 1;
int Yes = 1;
printf("Veuillez choisir votre niveau de dificulter !\n");
printf("1.Debutant \n");
printf("2.Intermediaire \n");
printf("3.Pro \n");
scanf("%d", &niveauxDeJeux);
printf("\n");
if (niveauxDeJeux == 1)
{
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 100 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
if (niveauxDeJeux == 2)
{
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(nombreMaximum - nombreMinimum + 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(nombreMaximum - nombreMinimum + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 500 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
if (niveauxDeJeux == 3)
{
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(nombreMaxi - nombreMin+ 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(nombreMaxi - nombreMin + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 1000 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
return 0;
}
et aussi en suivant le script que vous m'avet conseiller j'ai reçue beaucoup de message d'ereur
de ce type
4 error: stray ‘\302’ in program|
4 error: stray ‘\240’ in program|
que j'ai resolu mais jaimerai bien que vous mexpliquer ce type d'erreur et pourquoi il apparei et si cétait possible j'aurais aimes que vous testier mon script pour voire si tout va bien j'aimerai avoire votre avis
Merci beaucoup d'avance
- Edité par ibrahim lebond 15 septembre 2017 à 11:51:31
De toute façon, on ne va revenir la-dessus: si il y a for, while et do-while, c'est que chaque type de boucle a sa raison d'être.
J'ai pas dit que do-while était inutile je dit juste que dans son cas le fait de faire des do-while est pas lisible.
Et puis il existe en c certaine chose inutiles comme les variables register qui de nos jours sont gérer par les compilateur le mots clefs et donc devenus inutile!;)
Et puis il existe en c certaine chose inutiles comme les variables register qui de nos jours sont gérer par les compilateur le mots clefs et donc devenus inutile!;)
Et la rétro-compatibilité ?
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
c'est pour savoire comment le rendre plus lisible car pour l'instant je sais faire que sa et puis pour ajouter un fonction je vien de commencer le chapitre donc je sais pas l'utuliser encore
J'ai copié votre programme et il marche bien. Pour le rendre plus lisible,on peut améliorer le script en insérant des
lignes de commentaire genre:
//************************* NIVEAU DE DIFICULTE_DEBUTANT *****************************
if (niveauxDeJeux == 1)
{
ou encore:
//********** MODE SOLO ****************
if (modeJoueur == 1)
{
Un autre truc: on peut creer une fonction(void) avant le int main() pour remplacer un bout de code qui se répète
3 fois.Par exemple
void ModeJoueur(void) {
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
}
puis appeler la fonction par juste:ModeJoueur();
Par exemple:
//********************* NIVEAU DE DIFICULTE_INTERMEDIAIRE **********************
if (niveauxDeJeux == 2)
{
ModeJoueur();
//********** MODE SOLO ****************
if (modeJoueur == 1)
{
Un autre truc: on peut creer une fonction(void) avant le int main() pour remplacer un bout de code qui se répète
j'ai essayer mais quand je le fait sa me dit de déclarer le &modeJoueur et quand je le fait et que je lance le code apres le choix du mode joueur sa s'arette .
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
void ModeJoueur(void){
int modeJoueur;
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
}
int main()
{
printf("==== PLUSOUMOIN ====\n\n");
int niveauxDeJeux;
int modeJoueur;
const int MAX = 100, MIN = 1;
int nombreMaximum = 500, nombreMinimum = 1;
int nombreMaxi = 1000, nombreMin = 1;
int nombreMystere = 0 , nombreEntre = 0 ;
int compteurDeCoups = 1;
int Yes = 1;
printf("Veuillez choisir votre niveau de dificulter !\n");
printf("1.Debutant \n");
printf("2.Intermediaire \n");
printf("3.Pro \n");
scanf("%d", &niveauxDeJeux);
printf("\n");
if (niveauxDeJeux == 1)
{
ModeJoueur();
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 100 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
// ***** niveau intermediaire *******
if (niveauxDeJeux == 2)
{
ModeJoueur();
// ********** solo ****
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(nombreMaximum - nombreMinimum + 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(nombreMaximum - nombreMinimum + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
// ***** Joue a 2 *********
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 500 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
// Niveau Pro / Difficile
if (niveauxDeJeux == 3)
{
ModeJoueur();
if (modeJoueur == 1)
{
srand(time(NULL));
nombreMystere = (rand()%(nombreMaxi - nombreMin+ 1)) + MIN;
while (Yes)
{
while (nombreEntre != nombreMystere && compteurDeCoups <= 10)
{
printf("Quels et le nombre ?");
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
}
else if (nombreEntre < nombreMystere )
{
printf("c'est plus !\n");
}
else
{
printf("Bravo !\n");
printf("vous l'avez trouvez en %d coups\n\n",compteurDeCoups);
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
}
if (compteurDeCoups == 10)
{
printf("Perdue vous n'avez plus de coups !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
compteurDeCoups ++;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
nombreMystere = (rand()%(nombreMaxi - nombreMin + 1)) + MIN;//nouveau chifre aleatoire
compteurDeCoups = 0; //Remis a 1
}
}
if (modeJoueur == 2)
{
while (Yes)
{
printf("Veuillez choisir un nombre entre 1 et 1000 joueur 1 !\n");
scanf("%d", &nombreMystere);
system ("clear");
while (nombreEntre!=nombreMystere && compteurDeCoups <=10)
{
printf("Veuillez saisir votre reponse !\n");
scanf("%d", &nombreEntre);
printf("\n");
if (nombreEntre < nombreMystere)
{
printf("c'est plus\n");
printf("vous avais fait %d éssai /10 !\n",compteurDeCoups);
}
else if (nombreEntre > nombreMystere)
{
printf("C'est moin\n");
printf("vous avais fait %d éssai /10!\n",compteurDeCoups);
}
if (nombreEntre == nombreMystere)
{
printf("Bravo vous avez trouvez le nombre mystere");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
}
compteurDeCoups ++;
}
if (compteurDeCoups == 10)
{
printf("Voous avez perdu !\n");
printf("Souhaitez vous rejouer ?\n");
printf("1.Continuer 2 : Finire partie ?\n");
scanf("%d", &Yes);
printf("\n");
break;
}
if (Yes != 1)
{
printf("A bientot !");
return (0);
}
compteurDeCoups = 0;
}
}
}
return 0;
}
voici le code
et merci pour l'aide que vous m'vez aporter pour finir ce chapitre
- Edité par ibrahim lebond 18 septembre 2017 à 9:21:20
Généralement les variables se déclarent UNE SEULE FOIS avant la fonction "Main" juste après les "#include". Le programme(ou compilateur)doit connaitre ces variables à l'avance pour pouvoir résoudre les fonctions qu'il va rencontrer.
Essaye de déclarer "int modeJoueur;" au début, MAIS PAS une 2ème fois dans la fonction elle-mème. Exemple: au lieu de:
#include<time.h>
void ModeJoueur(void){
int modeJoueur;
printf("Mode joueur ?\n\n");
printf("1.Solo 2.Deux Joueur !\n");
scanf("%d", &modeJoueur);
printf("\n");
}
je fais:
#include<time.h>
int modeJoueur;
void ModeJoueur(void){
//int modeJoueur;
Merci sa fonctionne correctement voila j'ai envoyer le script avec une seule fonction main pour le dernier exercice et un des ma correcteur ma dit ceci
1. Le compteur de coups na marche pas correctement. 2. On ne peut pas relancé une nouvelle partie. 3. On tombe dans une boucle infinie si on met un met une lettre quand il faut trouvé le numéros mystère. 4. Ton code source n'est pas assez optimisé.
voila je suis pas fort pour repérer les bug car chez sa fonctionner bien donc j'aimerais votre avis pour voire et corriger c'est bug si sa ne vous derange pas
Merci je voyait dans certain script mais je savais pas a quoi sa servait le %s et on la pas encore appris dans le cours ou soit je l'ai rater la je suis au 3 chapitre de la partie 2 .
Mais en quoi ces en rapport avec ce que le correcteur ma dit je ne comprend pas
Est-ce-que sa veut dire que au lieu de réécrire le mode joueur pour tout les niveaux j'aurais pu écrire le contenue qu'une seule fois et i faire appelle pour les autres niveau avec cette déclaration %s . et que au lieu de faire tout les scanf en chiffre j'aurais pu les faire en lettre ou en mots.
- Edité par ibrahim lebond 21 septembre 2017 à 9:43:17
Ton problème est que tu re-déclare ton ModeJoueur a certains endroits et cela le réécrit tu n'as donc pas accès à la bonne valeur ans ton main.
Le "%s" permet d'afficher les "char *" c'est à dire les strings si tu utilises un "%s" dans scanf il faut que t'as string est la bonne place allouer en mémoire (je pense que tu n'en ai pas la dans le cour de C donc ne t'en occupe pas pour l'instant).
- Edité par ThomasBurgaud1 21 septembre 2017 à 12:46:15
1/ Si j'avais fait int m = 1, et diverses valeurs, on verrait moins bien d'où vient ce qui s'affiche.
Peut importent finalement les détails de char* et %s, le printf affiche un message contenu dans la variable m. Mais laquelle, sachant que plusieurs portent le même nom ?
2/ pour le "code pas optimisé", je laisse au soi-disant correcteur la responsabilité de ses propos. Le boulot d'un correcteur, c'est de fournir une correction (ne serait-ce qu'une critique) compréhensible par le corrigé.
Ce qu'on peut remarquer, c'est que des parties de code se répètent.
effectivement, ça veut dire que le programme occupera plus de place que ce qui est nécessaire pour résoudre le problème. Ca n'optimise pas la place. Ce n'est pas un vrai problème sur un PC, mais...
ça veut dire aussi que pour modifier un truc dans le programme, il faudra sans doute le faire à plusieurs endroits. Et que relire le programme nécessite plus de travail, parce qu'il est plus long. Ca n'optimise pas le temps de travail.
Le problème, c'est que pour y gagner vraiment, en taille, en simplicité, et programmer proprement, il faudrait découper en fonctions. Qui n'ont pas été vues à ce point du cours semble-t-il. Ou alors ils n'ont pas été convaincants sur le fait qu'il fallait absolument découper, ne serait-ce que pour réutiliser. C'est ce qui arrive quand on suit un cours mal conçu, et que le correcteur amateur ne se donne pas la peine de tenir compte de ce qui a été vu ou pas.
Un exemple, il pourrait y avoir une fonction qui
prend en parametre un message et 2 nombres min/max
affiche le message
lit 1 nombre
et si il n'est pas entre min et max, proteste et redemande
Une autre pour "voulez vous rejouer ?"
- Edité par michelbillaud 21 septembre 2017 à 14:45:56
Le principal défaut dans ton programme est à mon avis, sa structuration. Il est trop long avec beaucoup de répétitions et surtout sans commentaires, donc il est difficile à debugger.
Je vous suggère d'abord de créer une fonction(void) pour tout groupe d'instructions qui se répète. Par exemple, dans ton script il y'a un bout de code répété 12 fois:
Avant de "créer" - ou plutôt de l'écrire, restons modestes - il faut réfléchir.
La question à se poser en premier : Si on définissait une fonction pour faire ça, comment voudrait-on l'employer ?
Personnellement, j'aimerais bien
repeter
faire une partie
tantque le joueur veut continuer
qui s'écrirait naturellement
do {
... le code pour
... faire une partie
} while ( le_joueur_veut_continuer() );
Ce qui conduit au prototype
bool le_joueur_veut_continuer ();
(Oui, on a le droit de choisir des noms qui veulent dire quelque chose et sont faciles à comprendre. le_joueur_veut_continuer(), ça retourne true ou false, forcément).
Arrivé au chapitre de la programmation modulaire, j'ai pu faire sortir toutes les fonctions (ou routines) du fichier principal "Main" sauf une ("void DevinerNombre(void)") que le compilateur "refuse de la voir" avec les autres dans le fichier "functions.c".
Si la fonction reste dans le "Main" tout marche comme sur des roulettes (les roulettes des ZEROS bien entendu!
J'ai essayé toute sorte de manipulations sensée et insensée mais en vain.
Voici mes 3 fichiers(main.c, functions.c,functions.h)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "functions.h"
int modeJoueur;
const int MIN = 1;
int MAX;
int nombreMystere = 0;
int compteurDeCoups = 0;
int nombreEntre = 0;
int niveau;
int play = 1;
int Mode_menu_Flag = 0; // Indicateur pour revenir au 1er MENU ou non.
int rejouer;
void DevinerNombre(void); // Prototype
void DevinerNombre(void) { // Le jeu en lui-meme.
do {
printf("Quels et le nombre? ");
scanf("%d", &nombreEntre);
compteurDeCoups ++; // Incrementation des coups
if (nombreEntre == nombreMystere) {
printf("Bravo! ");
printf("Vous l'avez trouve en %d coups\n\n",compteurDeCoups);
break;
}
else if (nombreEntre < nombreMystere ) {
printf("c'est plus! \n");
}
else {
printf("C'est moins! \n");
}
printf("Il vous reste %d coups \n\n",10-compteurDeCoups); // Les coups qui restent.
if (compteurDeCoups == 10) {
printf("Vous avez perdu! \n");
printf("\n");
break;
}
} while(nombreEntre != nombreMystere && compteurDeCoups < 10); //
}
// *********************** MAIN FUNCTION **************************
int main() {
welcome(); //
srand(time(NULL));
while (play == 1) {
if (Mode_menu_Flag == 0) {
choose_Mode();
if (modeJoueur == 3) { // Pour sortir du jeu.
play = 0;
break;
}
choose_Level();
Mode_menu_Flag = 1; // pour ne pas retourner au menu "Mode joueur"
}
maximum(niveau);
switch (modeJoueur) {
case 1:
Mode_menu_Flag = 0; // pour retourner au menu "Mode joueur"
do {
nombreMystere = (rand()%(MAX - MIN + 1)) + MIN; //nouveau chifre aleatoire
compteurDeCoups = 0;
//printf("Le nombre secret est %d \n\n",nombreMystere); // for debugging purpose.
DevinerNombre();
ResterPartir();
} while (rejouer);
break;
case 2:
Mode_menu_Flag = 0;
do {
printf("Veuillez choisir un nombre entre 1 et %d JoueurZERO!\n",MAX);
scanf("%d", &nombreMystere);
system ("cls");
compteurDeCoups = 0;
if (nombreMystere > MAX) {
printf("Erreur!!! ce nombre n'est pas valide.\n\n");
break;
}
DevinerNombre();
ResterPartir();
} while (rejouer);
break;
case 3:
play = 0;
break;
default:
Mode_menu_Flag = 0;
play = 1;
break;
}
}
return 0;
}
Fichier 2= functions.c:
#include <stdio.h> //For printf() here
#include <stdlib.h> //for using "system("cls");" here
#include "functions.h" //goes with fuctions.c
#include <math.h>
int MAX;
int play;
int niveau;
int modeJoueur;
int rejouer;
int maximum(int niveau) {
switch (niveau) {
case 1:
MAX = 100; break;
case 2:
MAX = 500; break;
case 3:
MAX = 1000; break;
}
return MAX;
}
void welcome(void) {
printf("==== WELCOME TO PLUS OU MOINS ====\n\n");
printf("Taper 1 pour jouer \n");
printf("Taper 0 pour Quitter \n");
scanf("%d",&play);
printf("\n");
}
void choose_Level(void) {
printf("Veuillez choisir le niveau de difficulte.\n\n");
printf("1.Facile: 1 --> 100 \n");
printf("2.Moyen: 1 --> 500 \n");
printf("3.Difficile: 1 --> 1000 \n");
scanf("%d", &niveau);
//system("cls");
if ((niveau < 1)||(niveau > 3)) {
printf("Ce NIVEAU n'est PAS valide.\n");
niveau = 1;
printf("Par default ce sera le NIVEAU: %d. \n",niveau);
}
else {
printf("vous avez choisi le NIVEAU %d .\n",niveau);
printf("\n");
}
}
void choose_Mode(void) {
printf("******* MENU JOUEUR *******\n\n");
printf("1.Solo 2.Deux Joueurs 3.Quitter \n");
scanf("%d", &modeJoueur);
if ((modeJoueur < 1)||(modeJoueur > 3)) {
printf("Ce MODE n'est PAS valide.\n");
modeJoueur = 1;
printf("Par default ce sera le MODE: %d. \n",modeJoueur);
}
}
void ResterPartir(void) {
printf("Taper 1 pour: Rejouer. \n");
printf("Taper 0 pour: Changer ou Quitter \n");
scanf("%d", &rejouer);
system("cls");
if (rejouer) {
printf("Le NIVEAU est toujours %d ",niveau);
}
printf("\n");
if (!rejouer) {
printf("Merci d'avoir joue. A bientot! \n\n");
}
}
//void DevinerNombre(void) {
// do {
// printf("Quels et le nombre? ");
// scanf("%d", &nombreEntre);
// compteurDeCoups ++;
// if (nombreEntre == nombreMystere) {
// printf("Bravo! ");
// printf("Vous l'avez trouve en %d coups\n\n",compteurDeCoups);
// break;
// }
// else if (nombreEntre < nombreMystere ) {
// printf("c'est plus! \n");
// }
// else {
// printf("C'est moins! \n");
// }
// printf("Il vous reste %d coups \n\n",10-compteurDeCoups);
// if (compteurDeCoups == 10) {
// printf("Vous avez perdu! \n");
// printf("\n");
// break;
// }
// } while(nombreEntre != nombreMystere && compteurDeCoups < 10);
//}
//
× 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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent