Rechercher : dans
Par :

Liste chainée et pointeurs en programmation c

Dernière réponse le 23 fév 2008 à 13:50:05 nabelou1, le 2 jan 2008 à 23:57:22 
 Signaler ce message aux modérateurs

Bonjour,
j'aimerais qu'on m'aide à resoudre un probleme qui me depasse avec les pointeurs et listes chainées
voici le code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin *pvoisin;

typedef struct{
chaine nom ;
int dist;
int typ;
pvoisin suiv;}voisin;
typedef struct noeud *pnoeud;

typedef struct{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;}noeud;

int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",nod1->ville,nod1->nb);
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",vnod1->nom,vnod1->dist,vnod1->typ);
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données");
scanf("%s\n");
datasource(fichier) ;
}

et j'ai une ceci lors de la compilation

C:\Documents and Settings\nabelou\Bureau\tp3\liste.c: In function `datasource':
34: error: dereferencing pointer to incomplete type
34: error: dereferencing pointer to incomplete type
35: error: dereferencing pointer to incomplete type
:37: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type
39: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type

40: error: dereferencing pointer to incomplete type
40: error: dereferencing pointer to incomplete type

42: error: dereferencing pointer to incomplete type
43: error: syntax error before '}' token

merci d'avance

Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « liste chainée et pointeurs en programmation c » dans :
Langage C - Les listes chaînées Voir La notion de structure autoréferrentielle Une structure autoréferrentielle (parfois appelée structure récursive) correspond à une structure dont au moins un des champs contient un pointeur vers une structure de même type. De cette façon on crée...
Liste simplement chaînée VoirLISTES SIMPLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes chaînées A. Initialisation B. Insertion d'un élément dans la liste 1. Insertion...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...

1

BloodyAngel, le 3 jan 2008 à 00:02:47

Bin déjà je m'arrêterais à deux choses :
scanf ça pue... je serais toi j'utiliserait gets()

Deuxièmement, tu utilises "chaine"... c'est quoi exactement ?
Aides-toi et le ciel t'aidera...

Répondre à BloodyAngel

2

Doctor C, le 3 jan 2008 à 00:22:05

Chaine c'est un un tableau de char ( regarde le typedef au début)
Echo "Lima Mike Alfa";

Répondre à Doctor C

3

Doctor C, le 3 jan 2008 à 00:26:00

Et pour ton problème... peut-être que je suis rouillé en C mais, je crois bien que dans tes fscanf (pas tous...), tu fais une petite erreur.

i.e.:

fscanf(f,"%s %d\n",nod1->ville,nod1->nb);

tu devrais plutôt placer tes valeurs dans l'adresse ( &(nod1->nb) ) et non dans la variable elle-même.

plutôt comme ça:

fscanf(f,"%s %d\n",&(nod1->ville), &(nod1->nb));

(pour le ville, je suis pas certains que ce soit nécessaire étant donné qu'il s'agit d'une chaîne de caractères mais, pour le nb, ça me parait être la cause de ton erreur)
s'il s'agit de ton erreur, tu l'as répétée dans quelques autres fscanf
Echo "Lima Mike Alfa";

Répondre à Doctor C

4

nabelou1, le 4 jan 2008 à 13:36:32

Nod1 est deja une adresse
c'est un pointer et je crois que & n'est pas necessaire avec les pointeur

Répondre à nabelou1

5

Doctor C, le 4 jan 2008 à 23:11:45

J'espère ne pas me tromper dans ce que je vais dire par la suite:

oui, nod1 est un pointeur, mais les propriétés de ta structure ( "pointées" par les -> ) ne sont pas des pointeurs (pour la majorité). Ce sont des variables.

au pire, tu pourrais simplement l'essayer et me dire le résultat!
il est possible que je me trompe...

tiens-moi au courant!
Echo "Lima Mike Alfa";

Répondre à Doctor C

6

nabelou1, le 5 jan 2008 à 12:29:04

T'avais raison je n'ai plus les problemes de dereferencent
ais il e seble qu'il y'a autre cose car le programme s'arrete de lui même quand je tape le nom de mon fichjer.
voici le code

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin{
chaine nom ;
int dist;
int typ;
struct voisin *suiv;};
typedef voisin *pvoisin;
typedef struct noeud *pnoeud;
typedef struct noeud{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;};

int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",&(nod1->ville),&(nod1->nb));
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",&(vnod1->nom),&(vnod1->dist),&(vnod1->typ));
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données\n");
scanf("%s",&fichier);
datasource(fichier) ;
}

Répondre à nabelou1

7

nabelou1, le 6 jan 2008 à 00:30:49

J'ai fini par resoudre le probleme en faisant le dereferencement avec & comme tu l'avais dit Doctor c
je vous remercie pour le coup de main.

Répondre à nabelou1

8

Doctor C, le 6 jan 2008 à 04:04:08

Un problème de moins dans le monde!

heureux de t'avoir aidé!
Echo "Lima Mike Alfa";

Répondre à Doctor C

9

 fati, le 23 fév 2008 à 13:50:05

Slt je veux bien un bon cour avec des explications et des exercices parce que je ne viens pas de comprendre la methode d'ecrire un programme
merci bien

Répondre à fati
Collection CommentÇaMarche.net