Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau appartenant à une structure

Sujet résolu
    23 novembre 2017 à 20:55:26

    J'aimerai savoir si il n'y avait pas moyen d'optimiser mon initialisation d'élément de mon tableau :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "Structure.h"
    
    int main() {
          srand(time(NULL));
          int n = rand%4;
          Voiture *Voiture;
          Voiture = malloc( 4 * sizeof(Voiture) );
          InitPoint(Voiture);
          Voiture[0].type = "Renault";
          Voiture[1].type = "BMW";
          Voiture[2].type = "Bugatti";
          Voiture[3].type = "Fiat";
          printf("La voiture est une %s et est au point (%d,%d)\n", Voiture[n].type,Voiture->x,Voiture->y);
          free(Voiture);
          return 0;
          }

     Ma fonction :

    void InitPoint(Voiture *car){
         car->x = 0;
         car->y = 0;
    }



    Mon Structure.h :

    #ifndef DEF_STRUCTURE
    
    #define DEF_STRUCTURE
    typedef struct Voiture Voiture;
    struct Voiture {
    
        int             x;
        int             y;
        char        *type;
    
    };
    
    void InitPoint(Voiture *car);
    #endif

    A part cela le code marche bien.

    Merci :)

    EDIT : J'ai plutot créé une fonction pour un cas plus général mais le soucis reste l'optimisation de déclaration :

    void RandomType(Voiture *car, int n) {
              car[0].type = "Renault";
     // ...
             car->type = car[n].type;
    }



    -
    Edité par MrrRaph 23 novembre 2017 à 21:35:59

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2017 à 21:49:00

      Le code marche bien ?

      Il ne compile pas.  (ligne 8).

      Mise à par ça, ton initialisation n'est pas très cohérente :

      Tu fais un tableau de 4 voitures, tu affectes le type pour chaque cases du tableau, mais tu n'affectes les points (x,y) que pour la première voiture, les 3 dernières c'est au petit bonheur la chance.

      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2017 à 9:45:52

        rouloude a écrit:

        Le code marche bien ?

        Il ne compile pas.  (ligne 8).

        Mise à par ça, ton initialisation n'est pas très cohérente :

        Tu fais un tableau de 4 voitures, tu affectes le type pour chaque cases du tableau, mais tu n'affectes les points (x,y) que pour la première voiture, les 3 dernières c'est au petit bonheur la chance.

        Chez moi il compile avec les paramètres : -Wall

        Le caractère important du sujet est ma déclaration du tableau le reste du code n'est pas important sachant que je n'est pas fini le code.

        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2017 à 10:36:27

          Je ne suis pas sûr que ce soit une bonne idée de donner à une variable (Voiture) le nom de son type ou presque (Voiture*).

          Qu'est-ce que tu entends par optimiser l'initialisation ? C'est au cas où il y aurait 50 éléments dans le tableau ? Dans ce cas je pense qu'il faudrait les taper préalablement dans un fichier, puis lire le fichier pour initialiser le tableau.

          • Partager sur Facebook
          • Partager sur Twitter
            24 novembre 2017 à 11:24:41

            robun a écrit:

            Je ne suis pas sûr que ce soit une bonne idée de donner à une variable (Voiture) le nom de son type ou presque (Voiture*).

            Qu'est-ce que tu entends par optimiser l'initialisation ? C'est au cas où il y aurait 50 éléments dans le tableau ? Dans ce cas je pense qu'il faudrait les taper préalablement dans un fichier, puis lire le fichier pour initialiser le tableau.

            Boule de cristal : Et c'est là que ça va mal se passer

            typiquement, il va y avoir une boucle pour lire un enregistrement du fichier. A chaque tour de boucle on va charger les données dans des variables x, y et un tableau de caractère pour le type.

            Et puis on va mettre l'adresse du tableau dans car->type.... (la suite laissée en exercice).



            -
            Edité par michelbillaud 24 novembre 2017 à 11:24:58

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2017 à 15:31:32

              MrrRaph a écrit:

              Le caractère important du sujet est ma déclaration du tableau le reste du code n'est pas important sachant que je n'est pas fini le code.

              Pour ce qui est de la déclaration du tableau, c'est correcte, il n'y a rien à optimiser.

              Pour l'allocation de l'espace mémoire pour le tableau tester le retour de malloc pour s'assurer que l'allocation a bien réussi. 

              -
              Edité par rouloude 24 novembre 2017 à 16:12:08

              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2017 à 20:54:49

                rouloude a écrit:

                MrrRaph a écrit:

                Le caractère important du sujet est ma déclaration du tableau le reste du code n'est pas important sachant que je n'est pas fini le code.

                Pour ce qui est de la déclaration du tableau, c'est correcte, il n'y a rien à optimiser.

                Pour l'allocation de l'espace mémoire pour le tableau tester le retour de malloc pour s'assurer que l'allocation a bien réussi. 

                -
                Edité par rouloude hier à 16:12

                Très bien, merci de ta réponse je pensais juste avoir mal déclaré mon tableau mais ayant continuer pas mal mon code cela me parait de fonctionner. :) 

                robun a écrit:

                Je ne suis pas sûr que ce soit une bonne idée de donner à une variable (Voiture) le nom de son type ou presque (Voiture*).

                Qu'est-ce que tu entends par optimiser l'initialisation ? C'est au cas où il y aurait 50 éléments dans le tableau ? Dans ce cas je pense qu'il faudrait les taper préalablement dans un fichier, puis lire le fichier pour initialiser le tableau.

                Oui c'est ce que je penser en fait j'aurais plutot voulu savoir si il était directement possible de faire quelque chose du type : 

                char tab[4] = {"","","",""};

                En remplissant les "", mais je pense maintenant que ce n'est pas concevable étant donné qu'on alloue la taille de notre tableau compte tenu de notre cas mais merci pour vos réponse sujet clos. ;)

                • Partager sur Facebook
                • Partager sur Twitter

                Tableau appartenant à une structure

                × 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