Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Liste chainée et pointeurs en programmation c

nabelou1, le mercredi 2 janvier 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

1

BloodyAngel, le jeudi 3 janvier 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 jeudi 3 janvier 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 jeudi 3 janvier 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 vendredi 4 janvier 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 vendredi 4 janvier 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 samedi 5 janvier 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 dimanche 6 janvier 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 dimanche 6 janvier 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 samedi 23 février 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
[C] Parcours d'une liste chainee (Résolu) Bonjour, dans le cadre de l'amélioration d'un programme de pendu pour l'école, je dois manipuler une liste chainée (en langage C). Avant de bousiller le programme, sachant que je ne maitrisais pas trop les liste chainées, j'ai créé un petit programme... www.commentcamarche.net/forum/affich-3818674-c-parcours-d-une-liste-chainee
[C] tri sur liste chainée Bonjour, je n'arrive pas à faire un tri sur liste chainée. Il ne faut pas le faire lors de la saisie, mais à la demande de l'utilisateur (car je travaille sur une structure donc il faut pouvoir trier par nom, prénom, identifiant...). C'est la seule... www.commentcamarche.net/forum/affich-3029657-c-tri-sur-liste-chainee
Langage C - Les listes chaînées 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... www.commentcamarche.net/contents/c/cliste.php3
Liste simplement chaînéeLISTES 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... www.commentcamarche.net/faq/sujet-7444-liste-simplement-chainee
Liste chainée en C !Salut ! j'ai un pb au niveau des listes chainées. j'ai déclaré la structure et l'élément liste comme ca : typedef struct elem {char valeur; struct elem * suivant; } element; typedef element * liste; jusque là, il n'y a pas de pb, tt fonctionne. après,... www.commentcamarche.net/forum/affich-1200445-liste-chainee-en-c
Cours des files et pile et listes chainéesbonjour , je cherche un cours de langage c qui contient des parties bien detaillé sur les piles les files et les listes chainées.... et merci a tous les personnes qui veulent m'aidez d'apprendre cette partie www.commentcamarche.net/forum/affich-2532032-cours-des-files-et-pile-et-listes-chainees
Liste chainé en javaBonjours tout le monde voila j'ai un petit probleme en java, je souhaite faire une liste chainé d'objet . Cette partie j'arrive a la faire, mais le truc c'est que je voudrais afficher les attribut de mon objet Client en utilisant la methode... www.commentcamarche.net/forum/affich-2996194-liste-chaine-en-java
Les pointeurs en langage CDé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... www.commentcamarche.net/contents/c/cpoint.php3
Les chaînes de caractères en C++Qu'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... www.commentcamarche.net/contents/cpp/cppstring.php3
Langage C - Les chaînes de caractèresQu'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 chaîne... www.commentcamarche.net/contents/c/cstring.php3