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 :

Remplissage d'une liste chainée


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut Remplissage d'une liste chainée
    salut, j'ai ecrit un code qui a partir d'un fichier d'entree, remplit une structure de donnee et une liste chainee.
    la structure de donnee est de type GRI et s'appelle geo
    la liste chainee s'appelle g
    voila le code, je voudrais juste savoir si ma manipulation de pointeurs est correcte avant de tester. merci pour votre aide

    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
    struct gri
    {
        int n,nt,nb,nl,nr;
        float x,y;
        struct gri *next, *next1, *next2;      
    };
    typedef struct gri GRI;
    GRI * geo;
    
    main()
    {
        char inputfile[80];     
        int taille, i;     
        FILE *fp;
    //Lecture du nom de fichier
        puts("Enter file name:");
        gets(inputfile);  
        fp = fopen(inputfile, "r");  
    //initialisation du pointeur
        GRI *g=NULL;
    //initialisation du pointeur
        GRI *g=NULL;
        GRI *grd=NULL;
    //allocation de memoire
        grd=(GRI*)calloc(1,sizeof(GRI));
        if(grd==NULL)
        {
            exit(1);              
        }
        g=grd;
        fscanf(fp,"%d",&taille);
        geo = (GRI*)calloc(taille,sizeof(GRI));
    //remplissage de ma structure et liste chainee
        i=0;
        while ( !feof(fp) )
        {
    		fscanf(fp,"%d %d %d %d %d %d %d %f %f "
    				  ,&geo[i].n,&g->next1,&g->next2,&geo[i].nl,&geo[i].nr,&geo[i].nb,&geo[i].nt
    				  ,&geo[i].x,&geo[i].y);
            i++;
            g->next=(GRI*)calloc(1,sizeof(GRI));
            g=g->next;          
        }
        return 0;      
    }
    J'obtiens cette erreur apres compilation pour la ligne en gras dans le code:
    C:\Documents and Settings\mcutp\Desktop\Finite Difference Source\ess.cpp:: error: invalid conversion from `int' to `gri*'

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    1. Déjà, tu programmes en C, donc renomme-moi ce fichier de .cpp à .c
      Tu vas devoir monter tes déclarations de variables en début de bloc, puisque tu es sous Visual Studio, qui ne supporte pas le standard C99.
    2. Inclusions de <stdio.h> et <stdlib.h> manquantes.
    3. La fonction main() retourne un int. Toujours.
    4. La fonction gets() est un bug et ne doit pas être utilisée. Lui préférer fgets() ou même scanf() avec la taille (scanf("%80s", inputfile) ici).
    5. La variable g est déclarée deux fois.
    6. En C, le cast du retour de malloc() ou calloc() est inutile et même déconseillé.
    7. Mauvaise utilisation de feof(). http://emmanuel-delahaye.developpez....s.htm#fichiers
    8. Je ne vois pas ce qui peut causer l'erreur que tu mentionnes. Vérifie qu'elle ne disparait pas une fois les autres erreurs corrigées, mais j'en doute.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    struct gri
    {
        int n,nl,nr,nb,nt,c;
        float x,y,dl,dr,db,dt;
        struct gri *next, *next1, *next2;      
    };
    typedef struct gri GRI;
    GRI * geo;
     
    int main(void)
    {
        char inputfile[80];     
        int taille, i;    
        FILE *fp;
    //Lecture du nom de fichier
        puts("Enter file name:");
        scanf("%80s", inputfile);  
        fp = fopen(inputfile, "r");  
    //initialisation du pointeur
        GRI *g=NULL;
        GRI *grd=NULL;
    //allocation de memoire
        grd=calloc(1,sizeof(GRI));
        if(grd==NULL)
        {
            exit(1);              
        }
        g=grd;
        fscanf(fp,"%d",&taille);
        geo=calloc(taille,sizeof(GRI));
    //remplissage de ma structure et liste chainee
        i=0;
        while (fp!=NULL)
        {
    		fscanf(fp,"%d %d %d %d %d %d %f %f",&geo[i].n,&g->next1->n,&g->next2->n,&geo[i].nl,&geo[i].nr,&geo[i].nb,&geo[i].nt,&geo[i].x,&geo[i].y);
            i++;
            printf("%d\t%d\n",g->next1->n,g->next2->n);
            g->next=(GRI*)calloc(1,sizeof(GRI));
            g=g->next;   
            if (feof(fp) || ferror(fp))
            {
                break;
            }
        }
        system("PAUSE");
        return 0;      
    }
    Apres compilation, je n'ai acune erreur mais lors de l'execution le prgoramme rencontre une erreur.
    est ce que le remplissage de ma liste chainee est correct?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Lors de ton fscanf(), les pointeurs next1 et next2 ne sont pas encore alloués.
    De plus, le test d'erreur doit être sur le retour de fscanf() : Les valeurs de feof() et ferror() sont indéfinies tant que fscanf() n'a pas retourné une valeur anormale.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    donc quand j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    grd=calloc(1,sizeof(GRI));
    g=grd;
    je n'alloue pas de memoire pour next1 et next2?
    ils appartiennent tous les 2 a la structure grd.
    tu ferais comment a ma place

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Quand tu fais ça, il y a de la place pour les pointeurs eux-mêmes, mais pas pour les structures pointées.

    Malheureusement, je ne peux pas te conseiller car je ne sais pas exactement ce qu'est censé contenir le fichier texte, ni à quoi sert chaque champ de la structure, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    c pour lire un fichier de maillage
    c une geometrie composee de noeud
    donc la structure contient:
    n son numero next1 le noeud qui suit horizontalement et next2 le neoud qui suit verticalement nl,nr,nt,nb le numero de ses 4 voisins, x et y ses coordonees.

    tout ca est contenu ds un fichier texte que je dois lire

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    quand il y a des erreurs éviter les expressions à rallonge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(fp,"%d %d %d %d %d %d %f %f",&geo[i].n,&g->next1->n,&g->next2->n,&geo[i].nl,&geo[i].nr,&geo[i].nb,&geo[i].nt,&geo[i].x,&geo[i].y);
    Il faut décomposer le fscanf en plusieurs fscanf quitte à tout simplifier une fois qu'il n'ya pas d'erreurs.
    Sempiternelle question : est-ce que tu sais mettre des points d'arrêts , mettre des "watches" et utiliser le dégogueur ? Je n'en ai pas l'impression.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    je connais pas watches
    mais pour chercher les erreurs j'utilise systeme("PAUSE"); pour la localiser
    mais la mon programme se compile mais c'est a l'execution qu'il y a une erruer

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Peux-tu poster le fichier et sa structure exacte ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    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
     49     
       1    2    8     0    2    0    8       0.0000       0.0000      
       2    3    9     1    3    0    9    1666.6700       0.0000    
       3    4   10     2    4    0   10    3333.3301       0.0000   
       4    5   11     3    5    0   11    5000.0000       0.0000   
       5    6   12     4    6    0   12    6666.6699       0.0000    
       6    7   13     5    7    0   13    8333.3301       0.0000    
       7    8   14     6    0    0   14   10000.0000       0.0000    
       8    9   15     0    9    1   15       0.0000    1666.6666       
       9   10   16     8   10    2   16    1666.6700    1666.6666    
      10   11   17     9   11    3   17    3333.3301    1666.6666    
      11   12   18    10   12    4   18    5000.0000    1666.6666    
      12   13   19    11   13    5   19    6666.6699    1666.6666    
      13   14   20    12   14    6   20    8333.3301    1666.6666    
      14   15   21    13    0    7   21   10000.0000    1666.6666    
      15   16   22     0   16    8   22       0.0000    3333.3333      
      16   17   23    15   17    9   23    1666.6700    3333.3333    
      17   18   24    16   18   10   24    3333.3301    3333.3333    
      18   19   25    17   19   11   25    5000.0000    3333.3333    
      19   20   26    18   20   12   26    6666.6699    3333.3333    
      20   21   27    19   21   13   27    8333.3301    3333.3333    
      21   22   28    20    0   14   28   10000.0000    3333.3333    
      22   23   29     0   23   15   29       0.0000    5000.0000       
      23   24   30    22   24   16   30    1666.6700    5000.0000    
      24   25   31    23   25   17   31    3333.3301    5000.0000    
      25   26   32    24   26   18   32    5000.0000    5000.0000    
      26   27   33    25   27   19   33    6666.6699    5000.0000    
      27   28   34    26   28   20   34    8333.3301    5000.0000    
      28   29   35    27    0   21   35   10000.0000    5000.0000    
      29   30   36     0   30   22   36       0.0000    6666.6665       
      30   31   37    29   31   23   37    1666.6700    6666.6665    
      31   32   38    30   32   24   38    3333.3301    6666.6665    
      32   33   39    31   33   25   39    5000.0000    6666.6665    
      33   34   40    32   34   26   40    6666.6699    6666.6665    
      34   35   41    33   35   27   41    8333.3301    6666.6665    
      35   36   42    34    0   28   42   10000.0000    6666.6665    
      36   37   43     0   37   29   43       0.0000    8333.3330       
      37   38   44    36   38   30   44    1666.6700    8333.3330    
      38   39   45    37   39   31   45    3333.3301    8333.3330    
      39   40   46    38   40   32   46    5000.0000    8333.3330    
      40   41   47    39   41   33   47    6666.6699    8333.3330    
      41   42   48    40   42   34   48    8333.3301    8333.3330    
      42   43   49    41    0   35   49   10000.0000    8333.3330    
      43   44    2     0   44   36    0       0.0000   10000.0000       
      44   45    3    43   45   37    0    1666.6700   10000.0000    
      45   46    4    44   46   38    0    3333.3301   10000.0000    
      46   47    5    45   47   39    0    5000.0000   10000.0000    
      47   48    6    46   48   40    0    6666.6699   10000.0000    
      48   49    7    47   49   41    0    8333.3301   10000.0000    
      49    0    0    48    0   42    0   10000.0000   10000.0000
    je l'ai mis ds une balise de code
    ca c un exemple pour une geometrie de 49 noeuds.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    j'ai du mal à voir pourquoi il y a à la fois deux "suivant" et quatre voisins.

    Pourrais-tu montrer ce que ça donne sur une géométrie plus petite (genre 16 ou 25 noeuds) avec un schéma explicatif ?
    Un dessin vaut souvent mieux qu'un long discours, et le forum permet d'uploader des images (de préférence au format GIF ou PNG si c'est du Paint)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    donc sur l'image on peut voir un carre de 10*10m maille avec 25 noeuds
    en fait dans le fichier de donnees, l'utilite de connaitre le noeud suivant verticalement et horizontalement, c quand il y a des discontinuite dans ma geometrie (trou par exemple) dans ce cas la un noeud au bord n'aura pas de voisin de l'autr cote du trou mais aura un noeud suivant. et pour les noeuds suivant je prefrerais creer une liste chainee.

    voici le fichier de donnees correspondant au dessin:
    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
       25     
       1    2    6    1    0    2    0    6       0.0000       0.0000       
       2    3    7    2    1    3    0    7    2500.0000       0.0000    
       3    4    8    3    2    4    0    8    5000.0000       0.0000    
       4    5    9    4    3    5    0    9    7500.0000       0.0000    
       5    6   10    5    4    0    0   10   10000.0000       0.0000    
       6    7   11    0    0    7    1   11       0.0000    2500.0000       
       7    8   12    0    6    8    2   12    2500.0000    2500.0000    
       8    9   13    0    7    9    3   13    5000.0000    2500.0000   
       9   10   14    0    8   10    4   14    7500.0000    2500.0000  
      10   11   15    0    9    0    5   15   10000.0000    2500.0000  
      11   12   16    0    0   12    6   16       0.0000    5000.0000    
      12   13   17    0   11   13    7   17    2500.0000    5000.0000    
      13   14   18    0   12   14    8   18    5000.0000    5000.0000    
      14   15   19    0   13   15    9   19    7500.0000    5000.0000   
      15   16   20    0   14    0   10   20   10000.0000    5000.0000   
      16   17   21    0    0   17   11   21       0.0000    7500.0000     
      17   18   22    0   16   18   12   22    2500.0000    7500.0000    
      18   19   23    0   17   19   13   23    5000.0000    7500.0000   
      19   20   24    0   18   20   14   24    7500.0000    7500.0000    
      20   21   25    0   19    0   15   25   10000.0000    7500.0000   
      21   22    2    6    0   22   16    0       0.0000   10000.0000   
      22   23    3    7   21   23   17    0    2500.0000   10000.0000   
      23   24    4    8   22   24   18    0    5000.0000   10000.0000   
      24   25    5    9   23   25   19    0    7500.0000   10000.0000    
      25    0    0   10   24    0   20    0   10000.0000   10000.0000
    Images attachées Images attachées  

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK, voilà ce que je propose:
    1. Plutôt qu'une liste chaînée, tout faire dans un tableau (que l'on peut appeler un "tableau chaîné" vue l'utilisation qu'on fera des indexes.
    2. Une structure contenant simplement les indexes des "suivant".
      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      struct gri
      {
      	int ixMe, ixNextH, ixNextV;
      	int ixLeft, ixRight, ixTop, ixBottom;
      	float x, y;
       
      	...
      };
    3. Un tableau de taille "nombre+1", puisque les indexes commencent à 1 (ce sera plus facile à gérer).

    Ainsi, tu pourras charger le fichier facilement, et pour le chaînage, là où tu faisais auparavant:
    Tu feras désormais:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    p = &tableau[p->ixNextH];
    (voire même, tout faire avec les indexes, sans toucher à d'autre pointeur que celui du tableau).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    merci pour tes conseils
    je vais essayer ca et je te tiens au courant.

    j'ai encore une petite question comme dirait columbo lol
    pk declarer la taille du tableau a nombre+1 vu que sa taille est de nombre?

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour pouvoir utiliser les indexes à partir de 1 sans s'embêter (on gaspille l'emplacement zéro, mais c'est un faible prix à payer pour la tranquillité que ça donne).

    En clair, on alloue un tableau de taille nombre+1, ce qui permet d'utiliser des indexes de 0 à nombre, et on utilise ceux de 1 à nombre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    ok compris merci

  18. #18
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    comme j'ai un tableau de structure, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = &tableau[p->ixNextH];
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = &tableau[*p].NextH;
    en ayant initialise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *p = &tableau[0].NextH;
    et ca marche tres bien
    merci bcp pour ton aide

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais p n'est pas supposé être un pointeur sur int, mais un pointeur sur structure...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    moi j'ai pointe la valeur qui m'interessai ds la structure
    jai donc cree deux pointeur un pour les nextH et un pour les nextV.

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

Discussions similaires

  1. enregistrer une liste chainée dans un fichier?
    Par ALF-Teams dans le forum C
    Réponses: 7
    Dernier message: 08/03/2006, 18h42
  2. Réponses: 4
    Dernier message: 25/12/2005, 18h46
  3. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  4. [Stratégie]Sauvegarde d'une liste chainée dans un fichier
    Par BernardT dans le forum Général Java
    Réponses: 17
    Dernier message: 25/07/2005, 17h04
  5. manipulation d'une liste chainé
    Par sorari dans le forum C++
    Réponses: 1
    Dernier message: 16/03/2005, 12h32

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