Posez votre question Signaler

Les pointeurs en langage C [Résolu]

limbergh 650Messages postés 8 juillet 2007Date d'inscription 29 juin 2010Dernière intervention - Dernière réponse le 5 avril 2008 à 10:08
Bonsoir,
j'ai commencer un jeu de pendu, avec lequelle j'ai fait une fonction incrémentation quand le joueur trouve une lettre pour ne pas que son quota de coup diminue si il trouve la bonne lettre. Cette fonction fonctionne très bien avec des variables globales mais dès que je veux utiliser des variables locales avec des pointeurs ma fonction ne fonctionne plus...
je met ici mon code avec les variables globales (celui qui fonctionne), si quelqu'un à une idée pour faire avec des variables locales, je suis preneur pour des explications...
Merci d'avance
Voici mon code
#include <stdio.h>
#include <stdlib.h>
void compteur( char a);
char mot_a_trouve[5]; 
char mot[5];//mot introduit
int nbessai=10;
int  choix, i;
 char lc;//lettre composée
int main(int argc, char *argv[])
{
    
 


 
 
  for(i=0;i<=5;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;
       compteur(lc);
            
       }
    for(i=0;i<=5;i++)
        printf("%c",mot_a_trouve[i]);
        
}
       break;
   }
}
while(choix!=0);
system("PAUSE");
return 0;
}
void compteur( char a)
{
if(a==mot[i])
{
nbessai++;
}
else{}
}
Lire la suite 

Les pointeurs en langage C »

3 réponses
Réponse
+0
moins plus
ça m'etonne que ton code actuel marche il y a quelques erreurs dedans
comme tu demandes des mots de 6 lettres il te faudrais des tableau de taille 6 et pas 5 dans les declaration
ensuite il te faut changer aussi tes boucle for a ce moment
ton scanf pour stocké le mot n'est pas correct il n'y a pas de "&" puisque mot est un tableau
ensuite ton systeme de rajouter un essai quand la lettre est trouvé ne va pas fonctionné dans tous les cas imagine que l'utilisateur trouve deux fois de suite la lettre a ce moment il verra son nombre d'essai augmenté il pourra meme obtenir 12essais...
enfin je te conseille plutot une boucle while avec une variable trouve pour deduire si on doit diminué le nombre d'essais ou pas

voila essayes comme ça ça devrait aller
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    
 char mot_a_trouve[6]; 
char mot[6];//mot introduit
int nbessai=10;
int  choix, i;
 char lc;//lettre composée
int trouve=0;

 
 
  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=======");
       
       while (nbessai>0)
{
       printf("\n il vous reste %d coups a jouer", nbessai);
	trouve=0;
       printf("\n introduisez une lettre : ");
       scanf("%c", &lc);
       getchar();
       for (i=0;i<6;i++)
       {
       if (lc==mot[i]){
            mot_a_trouve[i]=lc;
       trouve++;}
            
       }
if(trouve==0)
nbessai=nbessai-1;

    for(i=0;i<6;i++)
        printf("%c",mot_a_trouve[i]);
        
}
       break;
   }
}
while(choix!=0);
system("PAUSE");
return 0;
}
Ajouter un commentaire
Réponse
+0
moins plus
Bonsoir

En complément au post de Mype,

#include<stdio.h> 
#include<conio.h> 
*/
// J'ai fait un test de fonctionnement portant sur la correction relative
// aux passations de valeurs, je n'ai pas poussé les tests sur l'aspect cohérence de 
// fonctionnement du problème traité par ce programme. 
#include <stdio.h>
#include <stdlib.h>

// (voir compteur) 
void compteur( char *a, int *i, char (*mot), int *nb_essai);

int main(int argc, char *argv[])
{
//J'ai agrandi les tableaux (par précaution).
char mot_a_trouve[16]; 
char mot[16];//mot introduit
int nbessai=10;
int  choix, i;
 char lc;//lettre composée

// Là tu débordais du tableau avec 5 éléments lorsque dans la boucle
//  i est = 5 en partant de 0 tu es sur le 6ième élément du tableau.
// Pour char mot_a_trouve [5] = "0123"; tu ne disposes que de 4
// éléments utiles indicés par des valeurs d'indice allant de 0 0à 3.
// le 5ième (le dernier, ici valeur d'indice 4) est "réservé" à '\0'.
// Pour s'en persuader fait : char mot_a_trouve [5] = "0123", puis
// tu compiles il n'y aura pas d'erreur, ajoute un caractère :
// char mot_a_trouver [5] = "01234"; tu auras ce type de message :
// "'mot_a_trouver' : dépassement des limites du tableau".

  for(i=0;i<=5;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();
// Idem (débordement)
              for (i = 0; i <= 5; i++)
                {
                 if (lc==mot[i])
                    mot_a_trouve[i]=lc;
// rappel :
// & : obtention de l'adresse d'un objet occupant un emplacement
// de la memoire. (mot_a_trouve est dirrectement l'adresse du 
//  début du tableau, donc pas de &)
                   compteur(&lc, &i, mot_a_trouve, &nbessai);
               }
// Idem (débordement)
             for (i = 0; i <= 5; i++)
                printf("%c",mot_a_trouve[i]);
        
            }
       break;
       }
    }
  while(choix!=0);
  system("PAUSE");
  return 0;
  }

// rappel :
//L'expression *x signifie : acces a l'emplacement memoire
//  dont x contient l'adresse (donc au contenu de x).
  void compteur( char *a, int *i, char (*mot), int *nbessai)
  {
//Attention : tu modifies ici nbessai qui est utilisé dans la
// boucle  for (nbessai=10;nbessai>0;nbessai--),c'est dangereux. 
    if (*a==mot[*i])
      {
       nbessai++;
      }
// Inutile
//else{}
  }
Ajouter un commentaire
Réponse
+0
moins plus
merci pour vos réponses!!!
Ajouter un commentaire
Ce document intitulé « les pointeurs en langage C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?