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 :

ajouter un élement à une liste ?


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut ajouter un élement à une liste ?
    bonjour,
    je veux ajouté des élement à la liste de chaine de caractère que j'ai
    comment je peut faire
    car mon but est de crée une liste contenant N élement nomé N1, N2........ Nn en utilisant boucle for (j'ajout à chaque foi un élément )
    qu'est vous en pensé ?? peut etre vous aveez une idée plus simple pour faire ca
    typedef char *string;
    string name[] = {"HNL","SFO","LAX","ORD","DFW","LGA", "PVD", "MIA","ZAR1", "ZAR2","ZAR3", "ZAR4" };
    mon but est avoir :
    string name[] = {"N1", "N2", "N3",..............................."Nn" };
    j'arrive à voir comment
    merci

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Dans ton cas chaque chaine de caractere contenues dans ton tableau sont en lecture seules, donc aucun moyen de les modifiées.

    Tu dois donc faire un tableau de char* et allouer avec malloc chaque case dont tu as besoin.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Deux possibilités, le tableau alloué dynamiquement malloc suivi éventuellement de realloc, ou la liste chaînée.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    attendez attendez ! c trop fort moir moi lol !
    vous pouvez m'expliqué juste un tupiti peut avec deux ligne de code svp ! avec l'exemple que je vous ais donnée ou autres !
    merci !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Connais tu l'allocation dynamique avec malloc?

    Car sinon, si tu veux rentrer uniquement que N1,N2,...

    Il te suffit de déclarer une variable en char * string. Est ce tu connais le nombre d'élément que tu veux insérer, ets ce que tu connais leur taille,...

    Car il va te suffir de faire une boucle sinon avec des malloc et des realloc.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par theshark85
    Connais tu l'allocation dynamique avec malloc?

    Car sinon, si tu veux rentrer uniquement que N1,N2,...

    Il te suffit de déclarer une variable en char * string. Est ce tu connais le nombre d'élément que tu veux insérer, ets ce que tu connais leur taille,...

    Car il va te suffir de faire une boucle sinon avec des malloc et des realloc.
    non je connais pas ! enfait je ne suis pas spécialiste j'ai juste besoin de fair un programe qui fait une telle application pour que je l'utilise apres ! et c pour ca que j'ai besoin de votre aide pour me guidé !

    pour la taille et le nombre d'element oui je les fixe au debut "n" !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    enfaite voila c que j'ai fait pour tester :

    int n=10;
    char *p = (char*) malloc (sizeof (char) * 10);
    for(i=0;i<n;i++)
    {
    p[i]='x';
    printf(" %c\n", p[i]);
    }
    mon probleme est que je veux au lieu initalise les élement du tableu en 'x' il l'intialise en "n1" , "n2" ........... "nn" pas de facon manuelle
    deja je pense que pour "ni" on doit changer le type de declaration en string non ?
    donc :
    - je change quoi pour remplacer 'x' par "n1" ou "nn" ?
    - et comment je fait pour initialisé les élement en n1 , n2 , n3 .... automatiquement
    merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Tu devrais t'en sortir avec un sprintf.

    sprintf(p[i],"N%d",i); à la place de p[i]='x';



    Par contre ton printf sera faut car à présent on a pu un caractére mais deux doncune chaine de caractéres => %s au lieu de %c

    Puis ton malloc aussi n'est pu valide car l'allocation n'est pu assez grande.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int n=10,i;
        char *p = (char*) malloc (sizeof(char)*n);
        for(i=0;i<n;i++)
        {
            sprintf(&p[i],"N%d",i); 
            printf(" %s\n", &p[i]);
        }
    Tu devrais avoir quelque chose dans ce genre là, même si quelque chose me chagrine, à par le fait que aprés il faudra faire des free vu que un malloc ne va jamais sans un free. Mais j'ai l'impression qu'il manque une ligne de code pour l'allocation dynamique. Je vais trouver.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par theshark85
    Tu devrais t'en sortir avec un sprintf.

    sprintf(p[i],"N%d",i); à la place de p[i]='x';



    Par contre ton printf sera faut car à présent on a pu un caractére mais deux doncune chaine de caractéres => %s au lieu de %c

    Puis ton malloc aussi n'est pu valide car l'allocation n'est pu assez grande.
    justement pour le malloc je doit faire quoi ??
    il n'y pas un type "chaine de caractère non (il ya int,un.. ,short, un.. , float, double, char .!) mais chaine de caractère je met quoi ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Cf post d'avant. Et sinon un char sert pour les chaines de caractére.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par theshark85
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int n=10,i;
        char *p = (char*) malloc (sizeof(char)*n);
        for(i=0;i<n;i++)
        {
            sprintf(&p[i],"N%d",i); 
            printf(" %s\n", &p[i]);
        }
    Tu devrais avoir quelque chose dans ce genre là, même si quelque chose me chagrine, à par le fait que aprés il faudra faire des free vu que un malloc ne va jamais sans un free. Mais j'ai l'impression qu'il manque une ligne de code pour l'allocation dynamique. Je vais trouver.
    merci ca marche tres tres bien ! je commence à aimé le c lol!
    encore merci !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Oui je sais que ça marche, ms il faudra penser à faire des free aprés pour desallouer la mémoire. Et si c'est résolu pour toi pense à le mettre.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par theshark85
    Oui je sais que ça marche, ms il faudra penser à faire des free aprés pour desallouer la mémoire. Et si c'est résolu pour toi pense à le mettre.

    a je ne sais pas trop comment faire de free !
    enfaite juste une tite question !
    pourquoi lorsque j'enleve "&" de l'expression ""printf(" %s\n", &p[i]);"" il me fait erreur de segmentation! c quoi cette histoire normalement il va affiché le p[i] c tout non ?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Le grand probléme de je connais pas les pointeurs.

    Sinon un conseil => http://c.developpez.com/faq/c/?page=pointeurs ceci t'aideras à mieux comprendre les pointeurs.

    http://c.developpez.com/faq/c/?page=...EURS_amper_var

    Et sinon, regarde des exemples, des tutos pour comprendre comment ça fonctionne. Car à par en te faisant un dessin, je ne saurais pas te l'expliquer.

  16. #16
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par theshark95
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int n=10,i;
        char *p = (char*) malloc (sizeof(char)*n);
        for(i=0;i<n;i++)
        {
            sprintf(&p[i],"N%d",i); 
            printf(" %s\n", &p[i]);
        }
    - Lorsque n vaudra 1000 et que i vaudra 999, à ton avis, que se passera-t-il?

    - On ne cast pas le retour de malloc

    - Où est l'intérêt de faire une allocation de 1000 caractères pour stocker "N1000"?

    - Où est le test pour vérifier l'allocation du malloc?

    Bon, pour ta défense:

    Tu devrais avoir quelque chose dans ce genre là, même si quelque chose me chagrine,
    A juste titre

    à par le fait que aprés il faudra faire des free vu que un malloc ne va jamais sans un free.
    Exact

    Mais j'ai l'impression qu'il manque une ligne de code pour l'allocation dynamique.
    Oui, calculer plus proprement combien de caractéres sont vraiment nécessaires...

    Jc

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Je m'en doutais de ça mais la fatigue n'aidant pas. Il ne faut pas m'en vouloir. Bon on va le refaire en mettant le cerveau en mode C propre.
    En gros là on a l'algo mais le code.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    donc je fait quoi moi ?
    car lorsque je sort printf de la boucle il donne des faut resultat il accumule les caracter
    il me donne p[1] = NNNNNN6
    p[2]= NNNNN6

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    c bon j'ai reussi a faire le tableur composé de n cahne de caractère
    mais il me reste la declaration de ces chaine de caractère !
    qcq a une idée comment je fait ??

    j'ai ce type de declaration :
    typedef enum { HNL, SFO, LAX, ORD, DFW, LGA, PVD, MIA,ZAR1,ZAR2,ZAR4, nonexistent} veert;
    je veux faire n declaration cad

    typedef enum { N1, N2, N3, ......... Nn } veert;
    c'est possible ?
    merci


    la solution que j'ai fait :
    typedef char *string;
    int i,n=30;

    char *p = malloc (2*sizeof(char));

    string tab[n];
    for(i=0;i<n;i++)
    {
    sprintf(p,"N%d",i);
    tab[i]=p;
    printf(" %s\n", tab[i]);
    }

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    En faite sur le principe pour t'aider car j'ai pas eu le temps.
    Tu déclare ton tableau à n cases avec le malloc, vu que tu connais déjà la taille. Puis par la suite, il va falloir que tu alloues chaque case de ton tableau en fonction de ton insertion.

    Et sinon le typedef char * string; => char *string suffit amplement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout dynamique dans une liste <ul>
    Par sacados1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/03/2007, 20h14
  2. Réponses: 7
    Dernier message: 09/01/2007, 09h36
  3. ajouter un nom à une liste déroulante
    Par lolo_bob2 dans le forum IHM
    Réponses: 8
    Dernier message: 25/10/2006, 20h21
  4. ajout automatique d'une liste
    Par Galak extra dans le forum Hibernate
    Réponses: 10
    Dernier message: 04/08/2006, 13h25
  5. Ajout/Suppression d'une liste a l'autre
    Par PeZ dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/03/2006, 14h39

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