Comportement boucle WHILE très étrange
Salut tout le monde voila j'ai déjà posté mon sujet sur un autre site mais je n'ai pas encore eu de réponse ( enfin si mais pers n'a de réponse a mon problème )
voila je fait un TP du pendu qui est un des exercices proposer sur ce site et mon while ne boucle plus que sur la variable nbEssaie .
j 'utilise une variable que j'ai appelé "boolean" qui me sert de boolean afin de décrémenter ma variable "nbEssai" si la personne n'a pas trouver le bon caractère , sauf que dés que j utilise cette variable ma seconde condition qui vérifie si les chaines de caractères sont égal ne fonctionne plus .
la boucle devrai normalement stopper quand le nombre d’essai arrive a 0 ou que les chaines de caractères dans les deux tableaux sont identiques
pour résume mon while ne fonctionne que si le nombre d’essai arriver a 0 et continu de boucler même si les chaines de caractères sont identiques .
MAIS WHILE fonctionne dés que je retire cette variable "boolean" .
Voila mon code Merci pour votre aide
Code:
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
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void MyFlush(void);
int main()
{
int i ;
int nbEssai = 10;
int longueurchaine = 10;
int ChaineIdentique = 1;
int boolean = 0;
const char motSecret[10] = "elephant";
char motSecretcopy[10];
char lettre;
char chaine1[longueurchaine] , chaine2[longueurchaine];
/*******************************/
/** longueurchaine est égal a la taille de la chaine "motSecret" .*/
longueurchaine = strlen(motSecret);
/*******************************/
/** création d'un tableau d'étoile égale a la longueur de la chaine motSecret .*/
for (i=0; i<longueurchaine; i++)
{
motSecretcopy[i]='*';
}
/*******************************/
printf("\n");
printf("Bienvenue dans le Pendu\n");
/*******************************/
/** tant que le nombre dessai est inférieur à 0 ou que la chaine de caractère est différente on boucle */
while (nbEssai > 0 && ChaineIdentique!=0 )
{
printf("\nIl vous reste %d essai \n\n",nbEssai);
printf("\nEntrer une lettre ! ");
scanf ("%c",&lettre);
MyFlush();
boolean=0;
/** boucle qui parcours le tableau */
for (i=0; i<longueurchaine; i++ )
{
/** Condition qui vérifie si la lettre entrer est égal au tableau a la position "i"
si oui je copie la lettre entrer dans un autre tableau et je met la variable
"boolean a a 1 afin de ne pas décrémenter la variable "essaie" */
if (lettre == motSecret[i])
{
motSecretcopy[i]=lettre;
boolean=1;
}
}
/*******************************/
/** Boucle qui affiche le tableau */
for (i=0; i<longueurchaine; i++)
{
printf("%c",motSecretcopy[i]);
}
/** La variable " ChaineIdentique " contient la fonction strcmp qui permet de verifier si deux chaine de caractére sont identiques .*/
ChaineIdentique = strcmp(motSecret, motSecretcopy) ;
/** Condition qui verifie si ma variable " boolean " est égal a 0 si oui la variable " nbEssaie " est décrémenter de 1 */
if ( boolean == 0)
{
nbEssai--;
}
}
/*******************************/
/** Affichage du tableau a la fin du grace a une boucle */
printf("\n\n");
printf("\n");
for (i=0; i<longueurchaine; i++)
{
printf("%c",motSecretcopy[i]);
}
return 0;
}
/*******************************/
/** Fonction qui permet de vider le scanf avant de le réutiliser dans une boucle afin d'éviter qui garde en mémoire un caractère */
void MyFlush(void)
{
scanf("%*[^\n]");
getchar();
} |
j'ai oublié de dire quelque chose :(
Déjà merci beaucoup pour ton aide ;)
bon la première chose que j'ai faite c'est de tester ton code et .... il me dit que ton for suivant
Code:
1 2 3 4 5 6 7 8
| ChaineIdentique = 1 ;
for(int j = 0 ; j < longueurchaine ; j++)
{
if( motSecret[j] != motSecretcopy[j] )
{
ChaineIdentique = 0 ;
}
} |
est simplement allowed en mode c99 et moi je suis en c89 un truc comme ça lol
j'ai fait quelque modification de ton code :)
voila j'ai modifier ceci
Code:
1 2 3 4 5 6
| /**************************************/
/** ton code while ( nbEssai > 0 ) */
/**************************************/
/** MON CODE */
while ( nbEssai > 0 && ChaineIdentique!=1) |
et retirer ceci .
Code:
1 2 3 4 5 6 7 8 9 10
|
/**************************************/
/** ton code */
// if( ChaineIdentique == 1 )
// {
// printf("\n\n____________________IDENTIQUE____________________\n\n");
// system("pause");
// exit(0);
// } |
et garder ton for qui boucle pour vérifier le tableau et si le tableau est égal ta variable chaineIdentique est égal a 1
Code:
1 2 3 4 5 6 7 8
| ChaineIdentique = 1 ;
for(j = 0 ; j < longueurchaine ; j++)
{
if( motSecret[j] != motSecretcopy[j] )
{
ChaineIdentique = 0 ;
}
} |