Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme pointeurs structures

Sujet résolu
    25 juillet 2006 à 12:29:58

    Salut a tous,
    bah voila j'ai un p'tit souci en C!!
    mais avant tout bravo a M@teo21 pour ces cours qui sont excellent et surtout m'ont permis de passer en 2iem année en info ;)
    alors voila le truc c'est que pour cet été j'm'été dit tient pourquoi pas essayer un p'tit jeux en console (genre basique mais qui utiliserai un peu de tout) et c'est comme ca que jme suis mis a faire mon p'tit bout de code...

    tout allait bien jusqu'a que j'me dise "et tient pourquoi pas gerer un p'tit inventaire??" ce qui me ferai pratiquer un peu les structures et encore mieux structures + pointeurs dans la mesure ou cet inventaire serai bien au chaud dans une fonction et les autres fonction n'auraient qu'a modifier la structure (de l'inventaire qui est donc dans un .c a part) par le biais de pointeur.

    Alors je commence a coder tout ca et puis la compilation se passe plutot bien (0 error et 0 warning :p ), j'me dit "chouette ca va marcher :D ", je lance mon programme et là...... rapport d'erreur de windows :(

    "Pourquoi moi??????????????????????"

    Donc jme suis dit tient j'vais tenter la même chose mais sans pointeur (et donc la ma structure j'la case dans la fonction qui doit modifier cette derniere) et la ça a marché. le truc c'est bah enfait j'voit pas trop trop d'ou vient le souci avec les pointeurs.

    "A l'aaaaaaaaaaaiiiiiiiiiiiddddddddddddddeeeeeeeeeeeeeee!!!"

    j'vois toujorus pas la solution bien que j'ai relu en long large et travers les cours sur les structures et pointeurs (en plus d'autres boukin que j'ai chez moi "Methodoligie de la prog en C")

    donc voila mon p'tit code (bon jvous ai tout mis aux meme .c pour faciliter l'affichage)


    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
    #include"RPG.h"


    typedef struct Inven Inven; // structure dans le .h a la base
    struct Inven
    {
    int epee ;
    int bouclier ;
    };



    static Inven* in ;

    void Struct (int* x1, int* y1);

    void aventure()
    {
    int x = 0;
    int y = 0;

    char choix;

    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("Salut, pour commencer tiens une epee\n");
    x = 1;
    printf("Ensuite, suis moi je t'expliquerais ta quete!!\n\n\n");



    in->epee = &x ;
    in->bouclier = &y ;


    char quitter[] = "quitter" ;
    char inve[] = "inventaire" ;

    char test[100];
    scanf("%s", &test);


    if ( strcmp( test, quitter ) == 0)
    menu();

    else if ( strcmp( test, inve ) == 0)
    Struct();

    }

    void Struct (void)
    {

    //static Inven* in ;

    //in->epee = x1 ;
    //in->bouclier = y1;


    printf("Pour l'instant tu possede : \n");

    if (in->epee == 1)
    printf("-l'epee\n");

    else if (in->bouclier == 1)
    printf("-le bouclier\n");

    else
    printf("bah... rien du tout!!\n");
    }


    PS si vous voyez des trucs mais plus que choquant vous pouvez vous lacher ;)
    j'suis encore entrain d'apprendre tout plein de choses

    Allé bah merci d'avance bonne chance et @plush ;)
    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2006 à 12:33:49

      Hmm on dirait que tu as un peu de mal. J'ai trouvé des erreurs dans tes phrases et dans ton code :p J'édite quand j'ai finit de te dire lesquelles ;)

      [EDIT] Correction :

      1.

      Citation : Thomas D.

      dans la mesure ou cet inventaire serai bien au chaud dans une fonction


      Parles tu de la déclaration ou de la définition ? Si c'est une définition, c'est dans un .h que ça se passe. Pour la délcaration, on déclare une variable du type de cette structure là où on en a besoin. Par exemple dans une fonction de manipulation si c'est temporaire sinon par paramètre. (ou alors en utilisant static si tu l'utilise nul part ailleurs)

      2.

      Citation : Thomas D.

      (de l'inventaire qui est donc dans un .c a part)


      Aïe. Les définitions (publiques) de structures ne se trouvent pas dans un .c à part, mais toujours dans un header.

      3. LES BALISES CODES !

      4.

      Citation : Thomas D.

      void Struct (int* x1, int* y1);

      Qu'est ce qu'un proto fait dans un .c ?

      5.

      Citation : Thomas D.

      in->epee = &x ;
      in->bouclier = &y ;

      Arg des variables int dont les valeurs sont des adresses ? Ca va pas dans ta tête :p Enlève l'opérateur '&' si tu veux qu'elles prennent les valeurs de x et y

      6. Indentation mauvaise

      7. Des erreurs de logiques à tout va (désolé)
      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2006 à 12:36:11

        Peut-tu dire à quel moment sa plante ?
        Met le code dans des balises appropriés !!!
        http://www.siteduzero.com/forum-83-6661-p1-regles-de-ce-forum.html
        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2006 à 12:49:06

          Guimers8 -> Grilled :p

          Avec ces infos tu devrais y arriver. Il y a sûrement des erreurs qui m'ont échappées mais ce sont les principales. Après j'ai des doutes quant à certaines lignes de codes mais ne peut rien dire sans le code complet.
          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2006 à 13:46:59

            Arf oui en effet plusieurs petites erreurs, alors la definition est bien dans le .h et sinon pour la declaration bah dans la mesure ou j'voudrai que la structure (que j'ai defini dans le .h), je crée une variable de type ma structure, par exemple "Inven inventaire" et le truc c'est qu'en fait j'voudrai que cette variable (inventaire) soit accessible de n'importe ou dans le programme (pour le 1 et 2 ;))

            euh pour les balises dsl j'ai pas tout lu sur les regels du forums :(

            pour le 4 j'ai oublié de le viré :(


            apres ouais jm'en suis rendu compte la pour les addresses et aussi c'est possible que l'indentation soit mauvaise et la logique plus que tres moyenne car j'debute un peu (enfin a part les trucs qu'on fesait en cours) et j'ai pas vraiement d'experience donc j'pense a 36 solution differentes et c'est possibles que se soit pas les bonnes ;)

            donc enfait j'vient de me rendre compte que ma question etait plutot ou je doit declarer ma variable pour qu'elle soit accessible partout ??
            • Partager sur Facebook
            • Partager sur Twitter
              25 juillet 2006 à 13:59:00

              Si tu veux qu'elle soit accessible partout, soit tu fais une variable déclarée globale et dansles autres fichiers tu la récupère avec "extern" (c'est TRES malpropre) ou alors tu passe ta variable en paramètre (pointeurs de structure) à chaque fonction.
              • Partager sur Facebook
              • Partager sur Twitter
                25 juillet 2006 à 14:06:33

                ok merci c'est cool ;) jme renseigne sur tout ça et j'test ce soir (et oui j'ai pô le net a la maison j'profite du boulot ;) )

                Merci et @plush
                • Partager sur Facebook
                • Partager sur Twitter
                  26 juillet 2006 à 10:55:05

                  ok c'est bon j'ai réussi :D suffisait juste que je declare et definisse ma variable dans le .h !!! Avec ça, plus besoin de pointeurs ;)

                  voila en gros ce que donne le code :

                  #include <stdio.h>
                  #include <stdlib.h>
                  #include "aventure.h"
                  #include <string.h>

                  int main()
                  {
                      i1.livre = false;
                      i1.clef = false;

                      menu();

                          return 0;
                  }




                  #include <stdio.h>
                  #include <stdlib.h>
                  #include "aventure.h"
                  #include <string.h>

                  void inventaire (void)
                  {
                     if (i1.livre == true)
                          printf("tu as le livre\n");

                      if (i1.clef == true)
                          printf("tu as la clef!!\n");

                      if (i1.clef == false && i1.livre == false)
                          printf("tu n'as rien !!\n");

                  }


                  #include<stdbool.h>

                  int main();

                  void inventaire (void);

                  typedef struct inventaire inv ;
                  struct inventaire
                  {
                      bool livre ;
                      bool clef  ;
                  };

                  inv i1;

                  void menu (void);


                  #include <stdio.h>
                  #include <stdlib.h>
                  #include "aventure.h"
                  #include <string.h>

                  void menu (void)
                  {

                      char quitter[] = "quitter" ;

                      printf("|----------|\n");
                      printf("|-Aventure-|\n");
                      printf("|----------|\n");
                      printf("\n\n\n\n\n");
                      printf("nouvelle partie\n\n");
                      printf("quitter\n\n");
                      printf("choix : ");

                      i1.livre = true;
                      inventaire();

                      char choix[100];
                          scanf("%s", &choix);

                      if (strcmp(choix,quitter) == 0)
                          printf("alors tu veux quitter?!!??\n");



                  }


                  donc voila (si vous avez d'autres critiques ne vous genez pas ;))

                  et Merci a kidpaddle2 pour le coup du logique tres mauvaise (c'est ce qui m'a fait repartir a 0 ;) et j'ai pu y voir plus clair)

                  @plush et merci encore ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juillet 2006 à 11:04:53

                    Je te l'avais dit ;) Il faut se souvenir de quoi mettre dans chaque fichier... -Ed- précise énormément comment utiliser au mieux la programmtion modulaire dans son site. Va y jeter un coup d'oeil. Tu pourras voir qu'y a t il dans les headers et les codes sources, coment les utiliser au mieux etc...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Probleme pointeurs structures

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown