Pseudo 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 à 21:11
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 5 févr. 2008 à 11:39
Bonsoir,
j'essaye de faire un pendu en C et je n'arrive pas à mettre un paramètre d'arret à une boucle for.
Je suis débutant pour préciser le niveau...
Voici mon code

Quand j'arrive dans la boucle for , ça boucle tout le printf et je ne vois pas comment faire(en plus ça doit-être bête!!!)

Merci d'avance pour vos interventions

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int nbessai=10;
 int  choix, i;   
 char mot[5];
 char lc;
 int pendu[5]={0};
  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 =====LE PENDU=======");
       for (nbessai=10;nbessai>0;nbessai--)
       
       printf("\n il vous reste %d coups a jouer", nbessai);
       
       printf("\n introduisez une lettre : ");
       scanf("%c", &lc);
       for (i=0;i<=5;i++)
       {
       if (lc==mot[i])
       printf("%c", lc);
       else 
       printf("*");
       
  
       }
       
  
    
       break;
   }               
}
while(choix!=0);
system("PAUSE");	
return 0;
}
A voir également:

8 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 févr. 2008 à 21:20
Salut,

Tout d'abord, quelques petits conseils : créer des fonctions annexes, tu t'y retrouveras mieux.
Par exemple ta boucle for, tu pourrais la mettre dans une fonction affichePendu. Et tu appellerais affichePendu dans case3 ;)

Sinon je ne comprends pas ce que tu dis par : "ça boucle tout le printf" ?
Ton problème ne serait pas plutôt que ça ne retient pas en mémoire les lettres trouvées par l'utilisateur ?
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 à 21:32
salut,
oui en effet ça ne retient rien en mémoire mais en plus dans la boucle for, il me marque 10 fois la ligne du dessous...
Il doit avoir une condition d'arret mais je n'arrive pas à la définir...
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 à 22:03
il faut placer des accolades et un getchar() et ça devrait marcher la
essaye ça
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int nbessai=10;
 int  choix, i;
 char mot[5];
 char lc;
 int pendu[5]={0};
  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 =====LE PENDU=======");
       for (nbessai=10;nbessai>0;nbessai--)
{
       printf("\n il vous reste %d coups a jouer", nbessai);

       printf("\n introduisez une lettre : ");
       scanf("%c", &lc);
       getchar();
       for (i=0;i<=5;i++)
       {
       if (lc==mot[i])
       printf("%c", lc);
       else
       printf("*");


       }


}
       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 à 22:17
Bonsoir mype,
tu m'as déjà eiguiller quelque fois et içi je ne comprend pas à quoi sert le getchar();, mon code
fonctionne mais je ne sais pourquoi.
Pourrais-tu aussi me guider sur la façon dont je peux faire pour que quand j'ai tapé une lettre et qu'elle se trouve
dans le mot, il garde la lettre en mémoire...
Merci d'avance
0

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

Posez votre question
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 à 22:41
alors quand tu tapes la lettre apres avoir taper la lettre tu appuie sur entree or la touche entree correspond au caractere "\n" donc si tu ne mets pas de getchar le caractere "\n" vas etre mis dans la variable lc qui stocke des caracteres donc le getchar permet de recupere le "\n" our eviter ce petit probleme

voila j'espere que tu as compris la ;)

sinon pour ton autre probleme tu peu créé un nouveau tableau, initialiser toutes ces cases avec le symbole "*" comme ça les lettres trouvé seront stocké dans le tableau

voici ce que ça donne:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int nbessai=10;
 int  choix, i;
 char mot[5];
 char lc;
 int pendu[5]={0};
 char mot_a_trouve[6];

       for(i=0;i<6;i++)
          mot_a_trouve[i]='*';

  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 =====LE PENDU=======");
       for (nbessai=10;nbessai>0;nbessai--)
{
       printf("\n il vous reste %d coups a jouer", nbessai);

       printf("\n introduisez une lettre : ");
       scanf("%c", &lc);
       getchar();
       for (i=0;i<=5;i++)
       {
       if (lc==mot[i])
            mot_a_trouve[i]=lc;
       }
    for(i=0;i<6;i++)
        printf("%c",mot_a_trouve[i]);

}
       break;
   }
}
while(choix!=0);
system("PAUSE");
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 févr. 2008 à 22:54
mype, getchar() n'est pas conseillé car pas du tout portable.
attention scanf("%s",mot); Il ne faut pas mettre &mot.

Voici le code modifié :
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
  int nbessai=10;
  int  choix;
  char motSecret[5];
  char ls[3];
  char lc;
  int i;
  char pendu[5];

  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 4 caracteres : ");
	  strcpy(pendu,"****\0");
	  scanf("%s",motSecret);
	  printf("pendu=%s\n",pendu);
	  printf("motSecret=%s\n",motSecret);
	  break;
  
	case 2 :
	  printf("\n\nle mot choisi est : %s" , motSecret);
	  break;
       
	case 3 :
	  printf("\n =====LE PENDU=======");
	  nbessai=10+1;
	  while(nbessai-->0 && strcmp(motSecret,pendu)){
	    printf("\n il vous reste %d coups a jouer", nbessai);	    
	    printf("\n introduisez une lettre : ");
	    fgets(ls,3,stdin);
	    lc=ls[0];

	    for (i=0;i<5;i++)
	      if(motSecret[i]==lc) pendu[i]=lc;

	    printf("%s",pendu);
	  }
       
  
    
	  break;
	}               
    }
  while(choix!=0);
  system("PAUSE");	
  return 0;
}



limbergh, normalement à partir de ça, tu devrais t'en sortir. Attention quand même à la lisibilité de ton code. La création de fonction n'est pas négligeable, car là limite illisible ;)
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 à 22:59
pourquoi tu dis que le getchar() n'est pas portable ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 févr. 2008 à 23:12
Je me suis mal exprimé.
Le problème du \n stocké dans le buffer dépend de l'OS. Et donc ta solution avec getchar() marchera sur les systèmes avec l'erreur mais demandera à l'utilisateur de revalider entrée une fois pour les autres systèmes.
Je pense que la solution char tmp[3] et fgets, 3= caractère + \n + \0 reste la meilleure.
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 à 23:18
ok merci pour la précision
0
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
5 févr. 2008 à 11:39
merci pour vos precisions, elles m'ont vraiment aidé...
0