Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Erreurs introuvables

(sûrement au niveau des pointeurs, pointeurs de fonctions et des structures)

    20 avril 2006 à 11:24:55

    Je programme depuis le debut du cours de Mateo, et ce matin, je me suis lancer dans un code pour créer une BDD (Banque De Données) pour gérer un inventaire de RPG (genre Fallout pour ceux qui connaissent.)

    J'ai créer les fichiers :
    • "listeArme.txt", qui contiend mes informations.
    • "ressources.txt", qui contiend des informations sur comment est organisé "listeArme.txt"
    • "main.c", qui contiend le main et ma fonction pour lire/enregistrer un fichier.
    • "Structures.h", qui contiend ma structure Arme.


    main.c

    /*
    main.c
    ------------

    Par Kl3M, pour Fallout3

    Rôle : Lis un fichier de stockage des informations concernant les armes,
           et restitue ces informations
    */

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

    lireFichier (int *nbArme, Arme Armes[]);

    main (int argv, char* argc[])
    {
            //declaration des variables
            Arme Armes[10];
            int nbArme = 0, i;
                   
            //Entrée dans les fichier       
            lireFichier (&nbArme, Armes[]) :
           
            //Verification
            for(i, i < nbArme, i++)
            {
                    printf("\nnom : %s\n", Armes[i].nom);
                    printf("\ttype : %ld\n", Armes[i].type);
                    printf("\tdegat : %ld, %ld-%ld\n", Armes[i].typeDgt, Armes[i].dgtMin, Armes[i].dgtMax);
                    printf("\tportee : %ld\n", Armes[i].portee);
                    printf("\tchargeur : %ld\n", Armes[i].chargeur);
                    printf("\tmunitions : %ld\n", Armes[i].typeMunition);
                    printf("\tdefinition : %s\n", Armes[i].definition);
            }
           
           
    }

    lireFichier (int *nbArme, Arme Armes[])
    {
            //declaration des variables
            FILE *fichier = NULL;
            int i = 0;
           
            fichier = fopen ("listeArmes.txt", "r");
           
            fscanf(fichier, "{%ld}\n", nbArme);
           
            for (i = 0 ; i < *nbArme ; i++)
            {
            //fscanf(fichier, "{%ld}{%ld}{%ld}", Armes[i]->id, Armes[i]->nom, Armes[i]->type);
            //fscanf(fichier, "{%ld}{%ld}{%ld}", Armes[i]->typeDgt, Armes[i]->dgtMin, Armes[i]->dgtMax);
            //fscanf(fichier, "{%ld}{%ld}{%ld}\n", Armes[i]->portee, Armes[i]->chargeur, Armes[i]->typeMunition);
            //fscanf(fichier, "{%ld}\n", Armes[i]->definition);
            fscanf(fichier, "{%ld}{%ld}{%ld}", Armes[i].id, Armes[i].nom, Armes[i].type);
            fscanf(fichier, "{%ld}{%ld}{%ld}", Armes[i].typeDgt, Armes[i].dgtMin, Armes[i].dgtMax);
            fscanf(fichier, "{%ld}{%ld}{%ld}\n", Armes[i].portee, Armes[i].chargeur, Armes[i].typeMunition);
            fscanf(fichier, "{%ld}\n", Armes[i].definition);
        }
           
            fclose(fichier);
    }




    Structures.h

    /*
    structures.h
    ------------

    Par Kl3M, pour Fallout3

    Rôle : Definis les structures de l'application
    */


    typedef struct Arme Arme ;
    struct Arme
    {
            int id;
            char nom[100];
            int type;
            int typeDgt;
            int dgtMin;
            int dgtMax;
            int portee;
            int chargeur;
            int typeMunition;
            char definition[1000];
    };




    listeArme.txt

    {5}
    {00}{pistolet 10mm}{00}{00}{5}{12}{25}{12}{17}
    {Vous ne devrez vous humilier à le porter qu'au tout début du jeu.}
    {01}{pistolet laser}{02}{01}{10}{22}{35}{12}{03}
    {Un petit pistolet sympa mais sans grand intérêt. Les dégâts n'égalent pas une bonne arme légère.}
    {02}{fusil de chasse}{00}{00}{12}{22}{14}{2}{11}
    {Assez frustrant pour une portée minable et un flingue à recharger tous les 2 coups! On sauve avec le fait qu'il soit précis et (un peu) puissant.}
    {3}{minigun}{01}{00}{7}{11}{35}{120}{14}
    {Il fait très mal, c'est évident. Même si les dégâts sont identiques à ceux de FO1, on en ressent dans le 2 très vite les limites, ce qui force à passer à des armes plus dévastatrices...}
    {04}{fusil a turbo-plasma}{02}{03}{30}{65}{25}{10}{04}
    {Le fusil parfait. Précis, bien plus puissant, et seulement 4 PA pour tirer! Avec Bonus cadence de tir et 9 PA, on peut s'en servir 3 fois par tour!! Les coups critique peuvent dépasser 200 points de dégâts!}



    ressources.txt

    00=normal
    01=laser
    02=feu
    03=plasma
    04=électrique
    05=emp
    06=explosion.


    Liste des types de munition

    00=aucun
    01=roquette
    02=combu lance flamme
    03=petite cellule énergétique
    04=cellule à micro fusion
    05=BB
    06=hn needler
    07=.223
    08=.45
    09=.44
    10=.40
    11=.12
    12=2mm
    13=4.7mm
    14=5mm
    15=7.62mm
    16=9mm
    17=10mm
    18=14mm

    Comment sont enregistré les armes ?
    {Nombre d'armes dans le fichier}
    {id de l'arme}{nom de l'arme}{Type de l'arme}{type de degat}{degat minimum}{degat maximum}{portée}{chargeur}{type des muintions}
    {definition de l'arme}

    EXEMPLE :
    {1}
    {00}{pistolet 10mm}{00}{00}{5}{12}{25}{12}{17}
    {Vous ne devrez vous humilier à le porter qu'au tout début du jeu.}

    signifie :
    L'arme n°0, le pistolet, est une arme à legere qui fais des degats normaux.
    Ils vont de 5 à 12 points de vie.
    Le pistolet as une portée de 25 metres et as un chargeur de 12 balles de calibre 10mm.
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2006 à 10:52:11

      Citation : Kl3M


      Commentaires et correction pour que ça compile. Mais la lecture est erronée. Je ne suiq pas sûr que fscanf() fonctionne comme tu le crois...

      /*
      main.c
      ------------

      Par Kl3M, pour Fallout3

      Rôle : Lis un fichier de stockage des informations concernant les armes,
             et restitue ces informations
      */

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

      #define F_ARMES "liste_Armes.txt"

      /* -ed-
      lireFichier (int *nbArme, Arme Armes[]);

              manque le type retour...
      */

      void lireFichier (int *nbArme, Arme Armes[]);

      int main (int argv, char* argc[])
      {
         //declaration des variables
         Arme Armes[10];
         int nbArme = 0, i;

         //Entrée dans les fichier
         /* -ed-
                 lireFichier (&nbArme, Armes[]) :

                 [] en trop...
                 ; et non ;
         */

         lireFichier (&nbArme, Armes);

         //Verification
         /* -ed-
                 for(i, i < nbArme, i++)

                 que dirais-tu d'apprendre le C, au lieu de bricoler n'importe quoi ?
         */

         for (i = 0; i < nbArme; i++)
         {
            printf("\nnom : %s\n", Armes[i].nom);

            /* -ed-
                            printf("\ttype : %ld\n", Armes[i].type);

                    pour un type int, le format est %d
            */

            printf("\ttype : %d\n", Armes[i].type);

            printf("\tdegat : %d, %d-%d\n", Armes[i].typeDgt, Armes[i].dgtMin, Armes[i].dgtMax);
            printf("\tportee : %d\n", Armes[i].portee);
            printf("\tchargeur : %d\n", Armes[i].chargeur);
            printf("\tmunitions : %d\n", Armes[i].typeMunition);
            printf("\tdefinition : %s\n", Armes[i].definition);
         }

         /* -ed- main() retourne int. Il faut retourner une valeur valide */
         return 0;
      }

      void lireFichier (int *nbArme, Arme Armes[])
      {
         //declaration des variables
         FILE *fichier = NULL;
         int i = 0;

         fichier = fopen (F_ARMES, "r");

         /* -ed-
                 fscanf(fichier, "{%ld}\n", nbArme);

         pour un pointeur sur int, le bon format est "%d".
         */

         fscanf(fichier, "{%d}\n", nbArme);

         for (i = 0 ; i < *nbArme ; i++)
         {
            /* -ed- *scanf() attend une adresse. Manque &. Pour l'adresse d'un int, c'est "%d" */
            fscanf(fichier, "{%d}{%d}{%d}", &Armes[i].id, &Armes[i].nom, &Armes[i].type);
            fscanf(fichier, "{%d}{%d}{%d}", &Armes[i].typeDgt, &Armes[i].dgtMin, &Armes[i].dgtMax);
            fscanf(fichier, "{%d}{%d}{%d}\n", &Armes[i].portee, &Armes[i].chargeur, &Armes[i].typeMunition);
            fscanf(fichier, "{%d}\n", &Armes[i].definition);
         }

         fclose(fichier);
      }
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !

      [C] Erreurs introuvables

      × 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