IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Stocker des types différents dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut Stocker des types différents dans un tableau
    Salut a tous,

    Voila je code un programme qui devrais permettre de stocker différent type de données dans un tableau dynamique.

    Mais le problème, je commence à bloquer lorsque il s'agit de demande à l'utilisateur de saisir le type qu'il souhaite, et de saisir la valeur qu'il souhaite stocker.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /*énumération des différents types*/
    enum
    {
        TYPE_INT, TYPE_DOUBLE, TYPE_STRING
    };
     
    struct Var{
        union
        {
            /*valeur entière*/
            int i;
            /*valeur flottante*/
            double d;
            /*chaîne d'un maximum de 99 caractères + le caractère final*/
            char str[100];
        }val;
        /*le type en cours d'utilisation*/
        int type;
    };
    typedef struct Var Var_t;
     
    struct Colonne{
        int nbcol, nbLigne;
        char nomcol[255];
    };
    typedef struct Colonne Col_t;
     
     
    void TypeGenerique()
    {
        Col_t *Col;
        int i;
        Col = (Col_t *) malloc(sizeof(Col_t));
     
        printf("Saisir nombre de colonne: ");
        scanf("%d", &Col->nbcol);
     
        for(i=0; i<Col->nbcol; i++)
        {
            printf("Saisir nom des colonne: ");
            scanf("%s", Col->nomcol);
        }
     
        printf("Saisir les valeur du tableau:\n");
     
        for(j=0; j<Col->nbLigne; j++)
        {
            printf("%s: ", Col->nomcol);
            scanf("%", );
        }
     
    }
    Je ne sais pas si pour les type je dois crée des fonctions spéciale des différente type ou bien s'il y a une autre méthode de faire plus aisément.

    Au final je souhaiterai pourvoir afficher une chose similaire a cela par exemple:

    +-------------|-------------|-------------|-------------+
    |   nomCol    |   nomCol    |   nomCol    |   nomCol    |
    +-------------|-------------|-------------|-------------+
    |     Type    |    Type     |    Type     |    Type     |
    +-------------|-------------|-------------|-------------+
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    |    Valeur   |    Valeur   |    Valeur   |    Valeur   |
    +-------------|-------------|-------------|-------------+
    Je cherche en vain a reproduire un programme qui pourrais me permettre de reproduire une chose similaire.

    Merci encore de votre aide!!!!!

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    As-tu essayé d'utiliser des pointeurs void avec un discriminant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef enum{BOOL, INT, FLOAT} Type;
     
    typedef struct
    {
              Type m_type;
              void * m_data;
              int m_nbElement;
    }Colonne;
     
    Colonne tableau[50];
    Après réflexion, je pense qu'il te faudrait aussi un tableau pour les taille de tes types

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int taille[] = { sizeof(char), sizeof(int), sizeof(float)};
     
    void addValue(void * v, Tableau t, int numColonne)
    {
                t[numColonne]->m_nbElement; //nombre d'éléments
                int m_taille = taille[t[numColonne]->m_type];
                // realloc de m_taille octet en plus.
                //memcpy
    }

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Bonjour,

    As-tu essayé d'utiliser des pointeurs void avec un discriminant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef enum{BOOL, INT, FLOAT} Type;
     
    typedef struct
    {
              Type m_type;
              void * m_data;
    }Colonne;
     
    Colonne tableau[50];
    Merci de votre réponse rapide !!!

    J'ai pas compris comment sa avec un discrimant explique toi ?

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Le discriminant, c'est ce que tu as déjà utilisé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct Var{
        union
        {
            /*valeur entière*/
            int i;
            /*valeur flottante*/
            double d;
            /*chaîne d'un maximum de 99 caractères + le caractère final*/
            char str[100];
        }val;
        /*le type en cours d'utilisation*/
        int type;
    };
    Il permet de connaître le type stocké.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Ah ok désoler je pensé que tu me parlé du discriminant de l'équation du second degré

    Mais du coup je ne sais pas si avec cet structur je dois faire des fonction spéciale car je suis encore dans le flou total.

    Je vois pas trop comment m'y prendre!!!

    Car au niveau du scanf ou l'utilisateur demande de saisir la valeur l'idée serais qu'il puisse saisir n'importe quel type du coup c'est pour cela que j'ai pensé qu'il fallait peut être créer différent fonction pour les types différents ???

    Mais du coup cet méthode devrais pouvoir demande a l'utilisateur de choisir quel type il veut saisir ???

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Au lieu de faire un fscanf tu peux faire un fgets.

    Ensuite, c'est à toi de voir comment tu différencies les différents types, selon quelles conditions/quels critères.

    Après pour le stockage, la seule chose qui importe vraiment c'est la taille des objets stocké et une indication pour que l'utilisateur sache quel type est stocké.

    Après, déterminer le type des objets à stocker ou récupérer le bon type d'après l'indication qu'on donne... c'est à l'utilisateur de ton tableau de se débrouiller.

Discussions similaires

  1. stocker des elements différents dans même enregistrement
    Par ColonelHicham dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 05/07/2013, 17h14
  2. Réponses: 6
    Dernier message: 07/11/2011, 14h20
  3. Réponses: 23
    Dernier message: 05/02/2010, 10h38
  4. Réponses: 2
    Dernier message: 28/05/2009, 14h44
  5. Stocker des fichiers xml dans un tableau en PHP
    Par ccsuperstar dans le forum Langage
    Réponses: 1
    Dernier message: 06/01/2009, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo