Condition "if" pas comprise !

Fermé
Usag1e - 7 nov. 2010 à 21:16
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 - 9 nov. 2010 à 08:48
Bonjour,

J'ai un pribleme avec la condition if.
Je dois programmer un jeu ou le joueur un moment donner doit choisir parmi 3 des celui ou ceux qu'il aimerait rejouer

voila ce que j'ai tenté de programmer mais sans succès:

[...]

printf("choisissez le nombre de des que vous voulez rejouer en appuyant sur 1,2,3 ou 4 si vous voulez garder les 3 dés \n);

int w4;
scanf("%d",&w4);

if(w4==1)

{
printf(" appuyez sur 1,2 ou 3 selon le dés que vous voulez rejouer");
}

[...]


déja pour le cas ou il voudrez rejouer qu'un seul dés je bloque.
je lance le programme mais quand je tape 1 pour rejouer 1 dés rien ne se passe (normal on va dire)
j'appuye donc sur la touche entrée de mon clavier pour valider en quelque sorte mon choix mais sa a pour conséquence de fermer la fentre de la console!

S'il vous plait aidez moi je dois rendre le programme bientot :s

merci de votre aide

ps: je programme avec Dev C++
la fin de mon programme resemble a ça:
[...]

getch()
return(0)
}

14 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
7 nov. 2010 à 22:01
Je ne vois pas d'erreur dans le peu de code que tu as mis, montre nous le code complet pour mieux identifier le problème.
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
7 nov. 2010 à 22:01
Salut,
Comme ça je ne vois pas trop ce que tu veux faire.....
Tu pourrais poster ton programme en entier ?
0
Voci en gros le début de mon programme:


/* Bibliothèque: */

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

void affiche(int t[])
{
int a;
for (a=0;a<3;a++)
printf("%d",t[a]);
}


/* Début du programme: */

int main()
{

/* Cette partie du programme permet de lancer le jeu quand les joueurs sont prêts.*/
printf(" \n-JEU DU 421- Choisissez des maintenant qui representera le Joueur A et le Joueur B \nAppuyer sur -c- pour commencer !\n\n");
char w1 = 0;
while ((w1 != 'c')) w1 = tolower(getch());

/*Cette partie du programme consiste à tirer au sort le premier joueur.*/
printf("Choix du premier joueur : appuyer sur -t- pour lancer le tirage au sort!\n\n");
char w2 = 0;
while ((w2 != 't')) w2 = tolower(getch());
srand( time(NULL));
int nt1,nt2;
nt1 = rand() %1000;
nt2 = rand() %1000;
printf("Voici le tirage :\n A: ");
printf("%d\n",nt1);
printf(" B: ");
printf("%d\n",nt2);
printf("celui qui possede le plus grand chiffre commence,\n\n");
/*On supposera que les chances qu'il y est égalité entre nt1 et nt2 sont faibles*/


/*Cette partie du programme consiste à faire jouer le premier joueur selon les régles du jeu.*/
printf("Au premier joueur d'appuyer sur -l- pour lancer les 3 des\n\n");
char w3 = 0;
while ((w3 != 'l')) w3 = tolower(getch());
printf("Voici les des du premier joueur: \n");
srand( time(NULL));
int t[3];
t[0] = rand() %6+1;
t[1] = rand() %6+1;
t[2] = rand() %6+1;
printf("des 1: %d\n",t[0]);
printf("des 2: %d\n",t[1]);
printf("des 3: %d\n\n",t[2]);

int w4;
printf("Entrez le nombre de des que vous voudriez rejouer en appuyant sur 1, 2, 3 ou 4 si vous voulez garder cette combinaison \n");
scanf("%d",&w4);


/* c'est ici que je bloque */

if(w4==1)
{

printf(" appuyez sur 1,2 ou 3 selon le dés que vous voulez rejouer");

}


getchar();
return(0);
}

Merci encore pour votre aide et votre patience

ps: je suppose ici que je veux rejouer un seul dés
une fois que je saurez comment faire pour le choix d'un seul dés à rejouer je saurez comment faire pour les 3 autres cas et peut etre meme pour le reste du programme!
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
7 nov. 2010 à 22:16
Je pense que tu devrais essayer avec un switch :

switch (w4)
{
	case 1 :
		//
		// instructions à faire si w4==1
		//
		break;
	case 2 :
		//
		// instructions à faire si w4==2
		//
		break;
	case 3 :
		//
		// instructions à faire si w4==3
		//
		break;
	case 4 :
		//
		// instructions à faire si w4==4
		//
		break;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
Modifié par Arya Dröttningu le 7/11/2010 à 22:17
C'est parce que tu ne fais rien dans ton if : tu affiche juste un message.

Essaye un truc du genre :
if(w4==1)
{
t[0] = rand() %6+1;
printf("des 1: %d\n",t[0]);
printf("des 2: %d\n",t[1]);
printf("des 3: %d\n\n",t[2]);
}
0
Ok je vais essayer tout ça tout de suite pour voir si sa va avec ce que je veux faire

Si vous avez d'autres astuces merci de les poster!
0
Re:

Mon soucis maintenant c'est comment faire pour valider le chiffre 1 corespondant a mon choix:
Autrement dit, quand j'arrive a la partie du programme ou il faut entrer 1,2,3 ou 4 selon le nombre de dés que l'on veux rejouer, j'appuye sur 1, le un saffiche sur la console mais rien de ne se passe après... et si j'ai le malheur d'appuyer sur entrée, la console se ferme !
0
Je crois que c'est a cause du getch(); à la fin du programme !
C'est peut etre ça qui fait que quand j'appuye sur "entrée" la fenetre se ferme.
D'ou la question comment faire pour prendre en compte la décision de l'utilisateur sans appuyer sur entrée, un truc qui fasse que quand j'appuye sur 1 pour rejouer un seul dés, le programme sait quoi faire après sans que j'intervienne.
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
7 nov. 2010 à 22:29
Oui bonne idée pour le case j'y avais pas pensé.
Mais le pas oublier de faire le cas : default (oui parce qu'un utilisateur tu lui dis d'entrer 1, 2, 3 ou 4 et forcément il va rentrer 5 xD)
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
7 nov. 2010 à 22:35
Bien sûr, mais si on ne mets pas default, ça fera juste rien, tant pis pour l'utilisateur ;)
Le cas le plus embêtant, c'est si l'utilisateur tape autre chose qu'un nombre...
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
7 nov. 2010 à 22:36
Ah pardon je me suis trompée...... Désolé j'avais mal lu tes commentaires......

int deRejouer ;


if(w4==1)
{
printf ("quel de rejouer ? \n");
scanf ("%d", &deRejouer);

if (deRejouer == 1){
t[0] = rand() %6+1;
printf("des 1: %d\n",t[0]);
printf("des 2: %d\n",t[1]);
printf("des 3: %d\n\n",t[2]);
}
else if (deRejouer ==2){
t[1] = rand() %6+1;
printf("des 1: %d\n",t[0]);
printf("des 2: %d\n",t[1]);
printf("des 3: %d\n\n",t[2]);
}
else if (deRejouer ==3).....
}
0
Merci !
Je suis certain que vos propositions marchent mais j'arrive pas a les mettre en pratique. Quand arrive le moment d'entrer le chiffre désiré, j'appuye sur 1(par exemple), et rien ne se passe !
Une petite idée de comment faire pour prendre en compte le chiffree entrée par l'utilisateur sans appuyer sur autre chose que sur le chiffre en question.
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
7 nov. 2010 à 22:48
Pour valider une entrée, il faut que tu rentres ton nombre et que tu tapes sur entrée.
Essaye de mettre system("PAUSE") à la place de ton getchar() ou getch()
Les puristes diront (à raison) qu'il ne faut pas utiliser system mais si ça marche pourquoi s'en priver ...
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
7 nov. 2010 à 22:47
Alors là ???????
J'ai testé chez moi en changeant quelques trucs car je suis sur linux et ça marche....

Ca doit être que comme ton programme n'a plus rien à faire, il quitte
0
Rien a faire, quand j'appuye sur 1 (par exemple) rien ne se passe...
D'autres suggestions ?
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
7 nov. 2010 à 23:14
Tu as essayé ce que KX t'as dit :

"Pour valider une entrée, il faut que tu rentres ton nombre et que tu tapes sur entrée.
Essaye de mettre system("PAUSE") à la place de ton getchar() ou getch()
Les puristes diront (à raison) qu'il ne faut pas utiliser system mais si ça marche pourquoi s'en priver "
0
Bonjour,

J'ai une autre question au sujet de la condition if
j'aimerai récupéré la valeur de scoreB dans une boucle if
voici la fin de ma boucle if

else if((tb[0]==4) && (tb[1]==3) && (tb[2]==1))
{
int scoreB;
scoreB=1;
printf("Le score du joueur 1 est de: - %d -",scoreB);
}


mais la partie ci dessous ne s'effectue pas correctement surement a cause du fait que scoreA et scoreB n'existe pas vuq qu'elles sont dans une boucle if
ma question est donc comment récupérer ces valeur dans les boucles
if?


if (scoreA>scoreB)
{
printf("\n\nJoueur 2 a gagne le tour. Le joueur 1 obtient %d points",scoreA);
pts2=pts2-scoreA;
pts1=pts1+scoreA;
}
else if (scoreA<scoreB)
{
printf("\n\nJoueur 2 a gagne le tour. Le joueur 1 obtient %d points",scoreB);
pts1=pts1-scoreB;
pts2=pts2+scoreB;

merci pour votre aide !
0
Arya Dröttningu Messages postés 581 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 3 janvier 2019 157
9 nov. 2010 à 08:48
Je ne vois pas trop ce que tu veux dire.....
Mais si les variables scoreA et scoreB doivent être utilisées en dehors du if il me semble que tu dois les déclarer en dehors :

int scoreB ;
if (maCondition)
{
	scoreB = 1 ;
}
0