IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Petit problème de boucle


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut Petit problème de boucle
    Bonjour à tous,

    Comment faire en sorte que mon menu MODE DE JEU réapparaisse systématiquement en début du jeu. En gros comment l'intégrer dans la boucle.

    Je vous remercie d'avance de votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, rejouer = 0, modeJeu = 0, nombreX = 0, xMAX = 0, xMIN = 0;
     
    	srand(time(NULL));
     
     
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%ld", &modeJeu);
     
     
    		if (modeJeu == 1)
    		{
    			while (rejouer == 0)
    			{
    				long compteur = 0;
    				nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    				printf("Le nombre X est compris entre 1 et 100\n\n");
     
    			 while(nombreMystere != nombreTaper)
    			 {
    				 compteur ++;
    				 printf("Tapez un nombre : \n");
    				 scanf("%ld", &nombreTaper);
     
    				 if(nombreMystere < nombreTaper)
    				 {
    					 printf("C'est moins...\n\n");
    				 }
    				 else if (nombreMystere > nombreTaper)
    				 {
    					 printf("C'est plus...\n\n");
    				 }
    				 else
    				 {
    					 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);
    				 }
    			 }
     
    			 printf("Tu as mis %ld coups pour le trouver\n", compteur);
    			 printf("0 : Rejouer \n1 : Quitter");
    			 scanf("%ld",&rejouer);
    			}
    		}
     
    		else if (modeJeu == 2)
    		{
    			while (rejouer = 1)
    			{
    				long compteur = 0;
     
    				printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    				scanf("%ld", &nombreX);
    				printf("JOUEUR 1 : Pour aider votre adversaire, donner une fourchette dans lequelle se trouve ce nombre\n");
    				printf("JOUEUR 1 : Tapez un nombre inferieur au nombre X\n");
    				scanf("%ld", &xMIN);
    				printf("JOUEUR 1 : Tapez un nombre superieur au nombre X\n\n");
    				scanf("%ld", &xMAX);
     
    				printf("JOUEUR 2 : Le nombre X est compris entre %ld et %ld\n", xMIN, xMAX);
     
    				while (nombreTaper != nombreX)
    				{
    					compteur ++;
    					printf("Devinez le nombre de votre adversaire\n");
    					scanf("%ld", &nombreTaper);
     
    					if (nombreTaper < nombreX)
    					{
    						printf("C'est plus...\n\n");
    					}
    					else if (nombreTaper > nombreX)
    					{
    						printf("C'est moins...\n\n");
    					}
    					else
    					{
    						printf("Bravo, vous avez trouve le bon nombre : %ld\n", nombreX);
    					}
    				}
     
    				printf("Vous avez mis %ld coups pour trouver le resultat\n", compteur);
    				printf("0 : Rejouer \n1 : Quitter");
    				scanf("%ld",&rejouer);
    			}
    		}
     
     
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
     
    		return 0;
     
    }

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Comment faire en sorte que mon menu MODE DE JEU réapparaisse systématiquement en début du jeu. En gros comment l'intégrer dans la boucle.
    euh... do/while ?

    Par contre, ton code peut être optimisé. J'ai lu ton code vite fait, en diagonale, mais dans les deux modes du jeu, on retrouve les mêmes bouts de code. Ce qu'il faudrait, je pense, c'est écrire un seul bout de code, qui peut gérer les deux modes (1 joueurs ou 2) ; ça allégerait le code et il serait plus lisible également.
    Je te conseillerais également, pour mieux structurer le code, de mettre la boucle qui permet de rejouer dans la fonction principale et de créer une fonction à part pour le jeu en lui-même.
    Enfin, c'est juste mon opinion perso.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Je n'ai pas vraiment lu ton code, mais j'ai lu le message de jeroman, si il y a 2 joueurs differents, avec le meme code je te conseil une variable, j'avais fais la meme chose avec un morpion (2 joueurs differents, mais la meme façon de jouer) il faut simplement rajouter une variable qui s'incremente à chaque tour, si la variable est impaire c'est donc le joueur 1 qui joue, si elle est paire c'est le joueur 2.

    Pour savoir si elle est paire ou impaire, je te conseil un modulo2 (%2 si je me souviens bien)

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Une petite remarque : sauf erreur, en lançant le programme et en choisissant d'emblée 2 (pour 2 joueurs), j'ai bien peur que le jeu ne se termine immédiatement (la boucle pour 2 joueur est un while ($rejouer == 1) ).

    Bug qui aurait pu être éviter en suivant les conseils de factorisation donnés plus haut.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Sauf erreur de ma part, le programme fonctionnera à 2 joueurs mais pas correctement :
    cela va mettre à 1 la variable rejouer, tu auras une boucle infinie, il faut "=="deja.

    Et une fois que tu auras "==" ta condition ne sera plus bonne car au debut tu initialise ta variable rejouer à 0

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ah oui, tiens, j'avais pas vu !

    Pour éviter les confusions entre = et == dans les if, je peux recommander de placer les constantes à gauche de l'opérande, de sorte que
    est illégal et génère une erreur de compilation, là où on aurait du écrire
    alors qu'en plaçant la variable à gauche, le compilateur ne peut pas alerter (sauf peut-être en activant certaines warnings).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    J'ai tenté ceci, mais pas meiux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, modeJeu = 0, nombreX = 0, xMAX = 0, xMIN = 0;
     
     
    	srand(time(NULL));
     
    	char continue;
    	do
    	{
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%ld", &modeJeu);
     
     
     
    		if (modeJeu == 1)
    		{
     
     
    				long compteur = 0;
    				nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    				printf("Le nombre X est compris entre 1 et 100\n\n");
     
    			 while(nombreMystere != nombreTaper)
    			 {
    				 compteur ++;
    				 printf("Tapez un nombre : \n");
    				 scanf("%ld", &nombreTaper);
     
    				 if(nombreMystere < nombreTaper)
    				 {
    					 printf("C'est moins...\n\n");
    				 }
    				 else if (nombreMystere > nombreTaper)
    				 {
    					 printf("C'est plus...\n\n");
    				 }
    				 else
    				 {
    					 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);
    				 }
    			 }
     
    			 printf("Tu as mis %ld coups pour le trouver\n", compteur);
    			 printf("0 : Rejouer \n1 : Quitter");
    			 scanf("%c",&continue);
     
    		}
     
    		else if (modeJeu == 2)
    		{
     
     
    				long compteur = 0;
     
    				printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    				scanf("%ld", &nombreX);
    				printf("JOUEUR 1 : Pour aider votre adversaire, donner une fourchette dans lequelle se trouve ce nombre\n");
    				printf("JOUEUR 1 : Tapez un nombre inferieur au nombre X\n");
    				scanf("%ld", &xMIN);
    				printf("JOUEUR 1 : Tapez un nombre superieur au nombre X\n\n");
    				scanf("%ld", &xMAX);
     
    				printf("JOUEUR 2 : Le nombre X est compris entre %ld et %ld\n", xMIN, xMAX);
     
    				while (nombreTaper != nombreX)
    				{
    					compteur ++;
    					printf("Devinez le nombre de votre adversaire\n");
    					scanf("%ld", &nombreTaper);
     
    					if (nombreTaper < nombreX)
    					{
    						printf("C'est plus...\n\n");
    					}
    					else if (nombreTaper > nombreX)
    					{
    						printf("C'est moins...\n\n");
    					}
    					else
    					{
    						printf("Bravo, vous avez trouve le bon nombre : %ld\n", nombreX);
    					}
    				}
     
    				printf("Vous avez mis %ld coups pour trouver le resultat\n", compteur);
    				printf("0 : Rejouer \n1 : Quitter");
    				scanf("%c",&continue);
     
    		}
     
     
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
     
    }while(continue == 'o');
     
    		return 0;
     
    }

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Tu ne devrais pas nommer une variable du non d'un mot-clé : continue...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    C'est mieux ainsi... Qu'en pensez-vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, modeJeu = 0, nombreX = 0, xMAX = 0, xMIN = 0, rejouer= 0;
     
     
    	srand(time(NULL));
     
     
    	do
    	{
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%ld", &modeJeu);
     
     
     
    		if (modeJeu == 1)
    		{
     
     
    				long compteur = 0;
    				nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    				printf("Le nombre X est compris entre 1 et 100\n\n");
     
    			 while(nombreMystere != nombreTaper)
    			 {
    				 compteur ++;
    				 printf("Tapez un nombre : \n");
    				 scanf("%ld", &nombreTaper);
     
    				 if(nombreMystere < nombreTaper)
    				 {
    					 printf("C'est moins...\n\n");
    				 }
    				 else if (nombreMystere > nombreTaper)
    				 {
    					 printf("C'est plus...\n\n");
    				 }
    				 else
    				 {
    					 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);
    				 }
    			 }
     
    			 printf("Tu as mis %ld coups pour le trouver\n", compteur);
    			 printf("0 : Rejouer \n1 : Quitter");
    			 scanf("%ld",&rejouer);
     
    		}
     
    		else if (modeJeu == 2)
    		{
     
     
    				long compteur = 0;
     
    				printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    				scanf("%ld", &nombreX);
    				printf("JOUEUR 1 : Pour aider votre adversaire, donner une fourchette dans lequelle se trouve ce nombre\n");
    				printf("JOUEUR 1 : Tapez un nombre inferieur au nombre X\n");
    				scanf("%ld", &xMIN);
    				printf("JOUEUR 1 : Tapez un nombre superieur au nombre X\n\n");
    				scanf("%ld", &xMAX);
     
    				printf("JOUEUR 2 : Le nombre X est compris entre %ld et %ld\n", xMIN, xMAX);
     
    				while (nombreTaper != nombreX)
    				{
    					compteur ++;
    					printf("Devinez le nombre de votre adversaire\n");
    					scanf("%ld", &nombreTaper);
     
    					if (nombreTaper < nombreX)
    					{
    						printf("C'est plus...\n\n");
    					}
    					else if (nombreTaper > nombreX)
    					{
    						printf("C'est moins...\n\n");
    					}
    					else
    					{
    						printf("Bravo, vous avez trouve le bon nombre : %ld\n", nombreX);
    					}
    				}
     
    				printf("Vous avez mis %ld coups pour trouver le resultat\n", compteur);
    				printf("0 : Rejouer \n1 : Quitter");
    				scanf("%ld",&rejouer);
     
    		}
     
     
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
     
    }while(rejouer == 0);
     
    		return 0;
     
    }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    2e choses par rapport à cette variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("0 : Rejouer \n1 : Quitter");
    scanf("%c",&rejouer);
    Tu le repetes 2 fois, pour le jeu tout seul, ou à 2.

    Tu peux le mettre une fois sortie de ton "if/else if/else" comme ça tu ne le marque qu'une fois pour les 2 modes de jeu, ça fera moins de code à l'interieur de ta boucle.


    Et pourquoi declarer la variable "rejouer" en char alors que c'est 0 ou 1, pourquoi pas en int ou en bool ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    Merci shadowking91
    Peux -t-on encore l'améliorer ?

    J'imagine que je pourrai mettre également 1 seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	 if(nombreMystere < nombreTaper)
    				 {
    					 printf("C'est moins...\n\n");
    				 }
    				 else if (nombreMystere > nombreTaper)
    				 {
    					 printf("C'est plus...\n\n");
    				 }
    				 else
    				 {
    					 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, modeJeu = 0, nombreX = 0, xMAX = 0, xMIN = 0, rejouer= 0;
     
     
    	srand(time(NULL));
     
     
    	do
    	{
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%ld", &modeJeu);
     
     
     
    		if (modeJeu == 1)
    		{
     
     
    				long compteur = 0;
    				nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    				printf("Le nombre X est compris entre 1 et 100\n\n");
     
    			 while(nombreMystere != nombreTaper)
    			 {
    				 compteur ++;
    				 printf("Tapez un nombre : \n");
    				 scanf("%ld", &nombreTaper);
     
    				 if(nombreMystere < nombreTaper)
    				 {
    					 printf("C'est moins...\n\n");
    				 }
    				 else if (nombreMystere > nombreTaper)
    				 {
    					 printf("C'est plus...\n\n");
    				 }
    				 else
    				 {
    					 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);
    				 }
    			 }
     
     
    		}
     
    		else if (modeJeu == 2)
    		{
     
     
    				long compteur = 0;
     
    				printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    				scanf("%ld", &nombreX);
    				printf("JOUEUR 1 : Pour aider votre adversaire, donner une fourchette dans lequelle se trouve ce nombre\n");
    				printf("JOUEUR 1 : Tapez un nombre inferieur au nombre X\n");
    				scanf("%ld", &xMIN);
    				printf("JOUEUR 1 : Tapez un nombre superieur au nombre X\n\n");
    				scanf("%ld", &xMAX);
     
    				printf("JOUEUR 2 : Le nombre X est compris entre %ld et %ld\n", xMIN, xMAX);
     
    				while (nombreTaper != nombreX)
    				{
    					compteur ++;
    					printf("Devinez le nombre de votre adversaire\n");
    					scanf("%ld", &nombreTaper);
     
    					if (nombreTaper < nombreX)
    					{
    						printf("C'est plus...\n\n");
    					}
    					else if (nombreTaper > nombreX)
    					{
    						printf("C'est moins...\n\n");
    					}
    					else
    					{
    						printf("Bravo, vous avez trouve le bon nombre : %ld\n", nombreX);
    					}
    				}
     
    				printf("Vous avez mis %ld coups pour trouver le resultat\n", compteur);
    				printf("0 : Rejouer \n1 : Quitter");
    				scanf("%ld",&rejouer);
     
    		}
     
     
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
     
    }while(rejouer == 0);
     
    		return 0;
     
    }

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Tu peux au moins factoriser la question 'rejouer/quitter', et sans doute plus avec un peu plus de manipulation pour ce qui est de la boucle du jeu.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    J'ai essayé de factoriser au maximum mais j'ai quelques messages d'erreurs de ce style ...

    scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, modeJeu = 0, nombreX = 0, xMAX = 0, xMIN = 0, rejouer= 0;
     
     
    	srand(time(NULL));
     
     
    	do
    	{
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%ld", &modeJeu);
     
     
     
    		if (modeJeu == 1)
    		{
    			long compteur = 0;
    			nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    			printf("Le nombre X est compris entre 1 et 100\n\n");
    		}
     
     
    		else if (modeJeu == 2)
    		{
     
    			long compteur = 0;
     
    			printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    			scanf("%ld", &nombreX);
    			printf("JOUEUR 1 : Pour aider ton adversaire, donnes une fourchette dans lequelle se trouve ce nombre\n");
    			printf("JOUEUR 1 : Tapes un nombre inferieur au nombre X\n");
    			scanf("%ld", &xMIN);
    			printf("JOUEUR 1 : Tapes un nombre superieur au nombre X\n\n");
    			scanf("%ld", &xMAX);
     
    			printf("JOUEUR 2 : Le nombre X est compris entre %ld et %ld\n", xMIN, xMAX);
    		}
     
    				 while(nombreMystere != nombreTaper)
    				 {
    					 long compteur = 0;
    					 compteur ++;
    					 printf("Tapes un nombre : \n");
    					 scanf("%ld", &nombreTaper);
     
    						 if(nombreMystere < nombreTaper)
    						 {
    							 printf("C'est moins...\n\n");
    						 }
    						 else if (nombreMystere > nombreTaper)
    						 {
    							 printf("C'est plus...\n\n");
    						 }
    						 else
    						 {
    							 printf("Bravo, tu as trouve le bon resultat qui est : %ld\n", nombreMystere);
     
    							 printf("tu as mis %ld coups pour trouver le resultat\n", compteur);
    							 printf("0 : Rejouer \n1 : Quitter");
    							 scanf("%ld",&rejouer);
    					 }
    				 }
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
     
    }while(rejouer == 0);
     
    		return 0;
     
    }

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Bon deja comme je t'ai dit, tu peux descendre tes deux lignes de code pour rejouer en dessous de ta boucle pour eviter de la repeter.

    Je rajouterai une chose (peut etre que c'est de là que vient ton warning, je ne sais pas)

    à chaque fois que tu fais un scanf, fais une boucle do while entre, pour etre sur que la personne rentre bien ce que tu veux.


    Par exemple pour rejouer, tu demande de taper 0 ou 1, mais si la personne tape 3,4,5,a,cfgr ça fonctionnera aussi si tu vois ce que je veux dire.

    Tu peux rajouer autour de ton scanf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do
    {
       printf("Tapez 0 pour rejouer, 1 pour quitter");
       scanf("%d", &rejouer);
    }while(rejouer != 0 || rejouer !=1);
    ça te permet de controler ce que la personne rentre au clavier, si la personne entre autre chose que 0 ou 1 tu resteras dans ta boucle.


    Pareil pour tes boucles au dessus, tu peux faire pareil en definissant comme borne tes valeurs Min et Max possibles

    do ... while (variable < Min && variable > Max)


    Les operateurs ET ou OU je ne suis plus sur de la condition je me trompe toujours, mais j'espere que tu as compris le principe.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Je verrais plus quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {
    	const int MAX = 100, MIN = 1;
    	long nombreMystere = 0, nombreTaper = 0, nombreX = 0, xMAX = 0, xMIN = 0, compteur = 0;
    	int rejouer= 0, modeJeu = 0;
     
    	srand(time(NULL));
     
     
    	do
    	{
    	printf("\n\nJEU DU PLUS OU MOINS\n\n");
     
    	printf("Mode de jeu\n\n");
    	printf("1 : 1 joueur\n");
    	printf("2 : 2 joueurs\n");
    	scanf("%d", &modeJeu);
     
     
     
    		if (modeJeu == 1)
    		{
    			nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
     
    			printf("Le nombre X est compris entre 1 et 100\n\n");
    		}
     
     
    		else if (modeJeu == 2)
    		{ 
     					printf("JOUEUR 1 : Tapez un nombre X sans que votre adversaire le voit\n\n");
    					scanf("%d", &nombreX);
    					printf("JOUEUR 1 : Pour aider ton adversaire, donnes une fourchette dans lequelle se trouve ce nombre\n");
    					printf("JOUEUR 1 : Tapes un nombre inferieur au nombre X\n");
    					scanf("%d", &xMIN);
    					printf("JOUEUR 1 : Tapes un nombre superieur au nombre X\n\n");
    					scanf("%d", &xMAX);
     
    			printf("JOUEUR 2 : Le nombre X est compris entre %d et %d\n", xMIN, xMAX);
    		}
     
     
    		while(nombreMystere != nombreTaper)
    			{	 
    				compteur ++;
    				printf("Tapes un nombre : \n");
    				scanf("%d", &nombreTaper);
     
    				if(nombreMystere < nombreTaper)
    					{
    						printf("C'est moins...\n\n");
    					}
    				else if (nombreMystere > nombreTaper)
    					{
    						printf("C'est plus...\n\n");
    					}
    				else
    					{
    						printf("Bravo, tu as trouve le bon resultat qui est : %d\n", nombreMystere);
    						printf("tu as mis %d coups pour trouver le resultat\n", compteur);
    					}
     
    			}
     
    		else
    		{
    			printf("Ce jeu ne peut se jouer qu'a 1 ou 2 joueurs\n");
    		}
     
    		printf("0 : Rejouer \n1 : Quitter");
    		scanf("%d",&rejouer);
     
    	}while(rejouer == 0);
     
    return 0;
     
    }
    Il manque encore les boucle do while pour les scanf comme je t'avais dit, et le code est surement à ameliorer encore.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    J'ai décidé de repartir de 0 avec un code un minimum correct !

    Seulement j'ai pas mal d'avertissement encore une fois

    Je sollicite vos connaissances géniales !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {	
    	// Déclaration des variables
    	int jouer = 0, nombreJoueurs = 0, nombreMystere = 0, nombreTaper = 0;
    	const int MAX = 100, MIN = 1;
     
     
     
    	printf("\t\t########## JEU DU PLUS OU MOINS ##########\n\n\n\n");
     
    	printf("Voulez-vous faire une partie ?\n\n");
    	printf("0 : Oui\n");
    	printf("1 : Non\n");
    	scanf("%d", &jouer);
     
     
    	while(jouer == 0) // Si le joueur veut commencer une partie
    	{
    		printf("Nombre de joueur pour cette partie ?\n\n");
    		printf("0 : 1 joueur\n");
    		printf("1 : 2 joueurs\n");
    		do{
    		scanf("%d", &nombreJoueurs);
    		}while(nombreJoueurs > 1); 
     
    		while(nombreJoueurs == 0) // Partie à 1 joueur
    		{
    			int compteur = 0; // Initialisation du compteur
    			nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; //Génération du nombre aléatoire
     
    			printf("C'est a vous de jouer !\n");
     
    			while (nombreTaper != nombreMystere) // Tant que le nombre n'a pas été trouver...
    			{
     
    				printf("Trouvez ce nombre\n\n");
    				scanf("%d", &nombreTaper);
     
    				if (nombreTaper < nombreMystere)
    				{
    					printf("C'est plus...\n\n");
    				}
    				else if(nombreTaper > nombreMystere)
    				{
    					printf("C'est moins...\n\n");
    				}
    				else
    				{
    					printf("Bravo, vous avez trouver le bon nombre qui est : %d en %d coups\n", nombreMystere, compteur);
    				}
     
    			} // Le nombre a été trouvé
     
    		} // Fin de la boucle pour le jeu à 1 joueur
     
    		while(nombreJoueurs == 1) // Partie à 2 joueurs
    		{
    			int compteur = 0;
     
    			printf("Joueur 1 : Tapez un nombre entre 1 et 100\n\n");
    			do{
    			printf("%d", &nombreTaper);
    			}while(nombreTaper < 1 || nombreTaper > 100);
     
    			while (nombreTaper != nombreMystere)
    			{
    				printf("Trouvez ce nombre\n\n");
    				scanf("%d", &nombreTaper);
     
    				if (nombreTaper < nombreMystere)
    				{
    					printf("C'est plus...\n\n");
    				}
    				else if(nombreTaper > nombreMystere)
    				{
    					printf("C'est moins...\n\n");
    				}
    				else
    				{
    					printf("Bravo, vous avez trouver le bon nombre qui est : %d en %d coups\n", nombreMystere, compteur);
    				}
     
    			} // Le nombre a été trouvé
    		}
     
    	return 0;
    }

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Essayes de faire un algo, je ne pense pas que tu en ais fait un, et il faut toujours faire un algo beton pour commencer, la programmation ensuite est simple.


    Deja tu peux te rendre compte que ta boucle while(nombredejoueur == 1) est uen boucle infinie puisque tu ne change jamais ta variable, donc une fois que tu rentres dans ta boucle, tu ne ressors plus.

    Pareil pour ta boucle while (jouer == 0) tu ne modifies jamais cette variable dans ta boucle, donc tu n'en sortiras jamais aussi


    Fais un algo, tu verras plus facilement tes erreurs, si tu n'es pas sur de ton algo tu peux le poster ici.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    Oula ! Merci shadowking91 mais pourrais tu être un peu plus précis car je débute et j'avoue ne pas trop comprendre comment m'y prendre concrètement pour sortir de ces boucles

    Sans parler d'algo car je n'ai jamais encore fais d'algo

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 24
    Par défaut
    Je l'ai améliorer...

    Maintenant quand je fini ma partie à 1 joueur, il boucle à nouveau. Il ne revient pas au menu principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
     
    int main(int argc, char *argv[])
    {	
    	// Déclaration des variables
    	int jouer = 0, nombreJoueurs = 0, nombreMystere = 0, nombreTaper = 0, compteur = 0;
    	const int MAX = 100, MIN = 1;
     
     
     
    	printf("\t\t########## JEU DU PLUS OU MOINS ##########\n\n\n\n");
     
    	printf("Voulez-vous faire une partie ?\n\n");
    	printf("1 : Oui\n");
    	printf("2 : Non\n");
    	scanf("%d", &jouer);
     
     
    	while(jouer == 1) // Si le joueur veut commencer une partie
    	{
    		printf("Nombre de joueur pour cette partie ?\n\n");
    		printf("1 : 1 joueur\n");
    		printf("2 : 2 joueurs\n");
    		do{
    		scanf("%d", &nombreJoueurs);
    		}while(nombreJoueurs < 1 || nombreJoueurs > 2); 
     
    		while(nombreJoueurs == 1) // Partie à 1 joueur
    		{
    			int compteur = 0; // Initialisation du compteur
    			srand(time(NULL));
    			nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; //Génération du nombre aléatoire
     
    			printf("C'est a vous de jouer !\n");
     
    			while (nombreTaper != nombreMystere) // Tant que le nombre n'a pas été trouver...
    			{
    				compteur ++;
    				printf("Trouvez ce nombre\n\n");
    				scanf("%d", &nombreTaper);
     
    				if (nombreTaper < nombreMystere)
    				{
    					printf("C'est plus...\n\n");
    				}
    				else if(nombreTaper > nombreMystere)
    				{
    					printf("C'est moins...\n\n");
    				}
    				else
    				{
    					printf("Bravo, vous avez trouver le bon nombre qui est : %d en %d coups\n", nombreMystere, compteur);
    				}
     
    			} // Le nombre a été trouvé
     
    		} // Fin de la boucle pour le jeu à 1 joueur
     
     
     
    		while(nombreJoueurs == 2) // Partie à 2 joueurs
    		{
    			printf("Joueur 1 : Tapez un nombre entre 1 et 100\n\n");
    			do{
    			printf("%d", &nombreTaper);
    			}while(nombreTaper < 1 || nombreTaper > 100);
     
    			while (nombreTaper != nombreMystere)
    			{
    				compteur ++;
    				printf("Trouvez ce nombre\n\n");
    				scanf("%d", &nombreTaper);
     
    				if (nombreTaper < nombreMystere)
    				{
    					printf("C'est plus...\n\n");
    				}
    				else if(nombreTaper > nombreMystere)
    				{
    					printf("C'est moins...\n\n");
    				}
    				else
    				{
    					printf("Bravo, vous avez trouver le bon nombre qui est : %d en %d coups\n", nombreMystere, compteur);
    				}
     
     
     
    			} // Le nombre a été trouvé
    		}
    	}
     
    	return 0;
    }

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 54
    Par défaut
    Comme je te l'ai dit, fais ton algo ...

    ton while(jouer == 1) tu ne change pas ta variable jouer dans la boucle, donc tu boucleras toujours sans repasser par le menu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème avec boucle DO
    Par mathilde13870 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/04/2014, 17h39
  2. [AC-2003] Petit problème de boucle !
    Par Plume27 dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/01/2013, 16h51
  3. Petit problème de boucle
    Par valx76 dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 29/11/2009, 19h13
  4. Petit problème de boucle
    Par [root@127.0.0.1]~# dans le forum Langage
    Réponses: 4
    Dernier message: 03/05/2009, 23h28
  5. ASP petit problème à propos sur une boucle if
    Par nicodu59 dans le forum ASP
    Réponses: 2
    Dernier message: 02/08/2007, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo