Pendu en C

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 4 févr. 2008 à 16:29
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 - 4 févr. 2008 à 17:59
Bonjour,

c'est juste une esquisse du pendu en c, après je l'amélorerai mais j'ai un problème dans mon code.
Quand je tape un mot, et que ensuite je choisi une lettre pour trouver le mot, le code
m'indique que ma lettre se trouve à toute les positions sauf la 0 et je ne comprnend pas
pourquoi. Soyez indulgent, je débute en C...

Merci d'avance pour vos interventions.

Benoît

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char mot [5];
    char lettre;
    int i;
 
    scanf("%s", mot);
    printf("tapez une lettre : ");
    scanf("%s",&lettre);
    
    for (i=0;i<=5;i++)
    {
        if(lettre=mot[i])
        printf("la lettre  est a la position %d\n" ,i);
        else
        printf("pas bon\n");
    }
    system("PAUSE");
    return 0;
}
 
 
A voir également:

17 réponses

cythonas Messages postés 611 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 17 janvier 2012 84
4 févr. 2008 à 16:41
for (i=0;i<=5;i++)
{


jconnai pas tres bien le C sa fait lontemp que j'en ai pas fait mais si tu met i++ sa veut dire qu'il increment i de +1 a chaque fois nan?

if(lettre=mot[i])
printf("la lettre est a la position %d\n" ,i); et la vu que ta variable c'est i en fait il prend chaque valeurs de i donc 1 2 3 4 donc il te met ta lettre partout kes ten dit??

en fait tu lui dit pour i compris entre 0 et 5 tu met la lettre sa tourne pas rond ton truc jcroi
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 16:48
non,
au début du code j'introduis un mot de six lettres, ensuite je chiosi une lettre
et la compare avec le mot tapé.
C'est la que ça m'indique que la lettre se trouve partout dans le mot
sauf en position 0...

Et je ne comprend toujours pas pourquoi!!!
0
cythonas Messages postés 611 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 17 janvier 2012 84
4 févr. 2008 à 16:51
ouais mais deja c pas normale que ta lettre se trouve partou si??
0
cythonas Messages postés 611 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 17 janvier 2012 84
4 févr. 2008 à 16:52
et il compte pas le 0 pasque de 0 a 5 sa fait 6 caractere jpense nan???essaye avec 6 a ton char mot
0

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

Posez votre question
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 16:55
#define Tmax5

c'est défini pour 6 caractères vu qu'il y a le 0 qui compte non?

Donc tu n'as pas d'explications pourquoi ça plante?
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 16:58
je voulais pas dire ça, mot [5] défini 6 caractères quand même non?
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
4 févr. 2008 à 17:01
Salut limbergh,

Dans ta boucle for, dans if il faut mettre "==" et non "=".

== signifie un test.

= signifie affectation.

donc si tu corriges ton code, ça doit marcher.

CORRECTION :

....
...
for (i=0;i<=5;i++)
{
if(lettre==mot[i])
printf("la lettre est a la position %d\n" ,i);
else
printf("pas bon\n");
}
...
...

a+ ;-)
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 17:13
Salut oupsman,
effectivement ça fonctionne mieux mais ce que je ne comprend pas c'est pourquoi
la première lettre du mot tapé n'est jamais reconnue par la lettre introduite...
Si tu as une explication à ça je suis preneur...

Merci d'avance
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 17:29
Voilà, je pense que mon code est plus lisible...

En fait quand j'introduis une lettre pour deviner le mot introduis avant, pex, le mot est "loulou", quand je vais sur la case 3
et que j'introduis un "l" il m'indique en position 0, 1, 2, pas bon, 3 bonne piosition et en 4 et 5 pas bon.
Pourquoi ça ne fonctionne pas pour la posiiton 0??????

Merci d'avance

Limbergh
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 17:30
j'avais oublié le code....
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int  choix, i;   
 char mot[5];
 char lc;
  do
  {
  printf("\n\n-1- choisissez un mot!!! : ");
  printf("\n-2- affichez le mot choisi!!! : ");
  printf("\n-3- tapez une lettre : ");
  printf("\n votre choix==============>");
  scanf("%d", &choix);
  
  switch(choix)
  {
  case 1 :
       printf("introduisez un mot de 6 caracteres : ");
       scanf("%s", &mot);
       break;
  
  case 2 :
       printf("\n\nle mot choisi est : %s" , mot);
       break;
       
  case 3 :
       printf("\n introduisez une lettre : ");
       scanf("%s", &lc);
       for (i=0;i<=5;i++)
       {
       if (lc==mot[i])
       printf("\n la lettre est a la position %d : ", i);
       else 
       printf("\n pas bon");
       }
       break;
                   
               
               
               
  }
               
}while(choix!=0);
  system("PAUSE");	
  return 0;
}
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
4 févr. 2008 à 17:40
rajoute un getchar(); apres scanf("%d", &choix); pour recupéré \n
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
4 févr. 2008 à 17:45
essayes avec ça :

int main(void)
{
char mot[5];
char lettre;
int i;

scanf("%s", mot);
printf("tapez une lettre : ");
scanf(" %c",&lettre); /*ICI J'AI RAJOUTE UN ESPACE AVANT %c*/
/*et li tiens était aussi un %s que j'ai remplacé*/

for (i=0;i<5;i++)
{
if(lettre==mot[i])
printf("la lettre est a la position %d\n" ,i);
else
printf("pas bon\n");
}
system("PAUSE");
return 0;
}

normalement ça doit faire ce que tu voulais a + ;-)
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 17:46
Salut mype,

j'ai fait ce quu tu m'as suggéré et mon problème persiste... De plus, je ne comprend pas
pourquoi il faut rajouter getchar();...
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
4 févr. 2008 à 17:51
Essayes mon post 12, c'est plus simple
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10 > oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008
4 févr. 2008 à 17:53
et tiens moi au courant ;-)
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
4 févr. 2008 à 17:53
la letre est un seul caractere donc tu remplace %s par %c là scanf("%c", &lc);
rajoute un autre getchar(); apres scanf("%c", &lc);

quand tu tape ton choix ou ta lettre apres tu appuies sur entree donc il te faut un getchar pour recupere le caractere \n qui correspond a la touche entree

essaye ça la ça devrait marché
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int  choix, i;
 char mot[5];
 char lc;
  do
  {
  printf("\n\n-1- choisissez un mot!!! : ");
  printf("\n-2- affichez le mot choisi!!! : ");
  printf("\n-3- tapez une lettre : ");
  printf("\n votre choix==============>");
  scanf("%d", &choix);
    getchar();
  switch(choix)
  {
  case 1 :
       printf("introduisez un mot de 6 caracteres : ");
       scanf("%s", &mot);
       break;

  case 2 :
       printf("\n\nle mot choisi est : %s" , mot);
       break;

  case 3 :
       printf("\n introduisez une lettre : ");
       scanf("%c", &lc);
        getchar();
       for (i=0;i<=5;i++)
       {
       if (lc==mot[i])
       printf("\n la lettre est a la position %d : ", i);
       else
       printf("\n pas bon");
       }
       break;




  }

}while(choix!=0);
  system("PAUSE");
  return 0;
}
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
4 févr. 2008 à 17:54
Merci pour vos réponses (oupsman et mype)...
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
4 févr. 2008 à 17:56
de rien ;)
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
4 févr. 2008 à 17:59
ravi d'avoir pu t'aider, a+ ;-)
0