balayer liste chainée - C - Programmation
Marsh Posté le 05-06-2006 à 16:57:17
Ne mets pas d'espace entre ENSEMBLE et premier:
|
Et ne mets des noms en majuscule que pour les constantes (define), c'est pas très lisible.
Marsh Posté le 05-06-2006 à 17:32:41
Meme en enlevant les espaces j'ai la meme erreur je mets les espaces afin de rendre mon programme plus lisible et pour les majuscules désolé mais j'ai apris comme ca.
J'ai fais une correction de ma fonction mais la meme erreur perciste, voila le nouvel algorithme :
PERSONNE * ref_personne(char * nom, char * prenom)
{
ELEMENT * tmp;
PERSONNE * resultat;
tmp = ENSEMBLE->premier; /* expected primary-expression before '->' token */
int trouve = 0;
while (tmp != NULL && !trouve)
{
if ((strcmp(tmp -> personne -> nom, nom)==0) && (strcmp(tmp -> personne -> prenom, prenom)==0))
{
trouve = 1;
resultat = tmp -> personne;
}
tmp = tmp -> suivant;
}
return resultat;
}
Voila.
Marsh Posté le 05-06-2006 à 18:27:59
Bon.
Tu fais
|
C'est quoi ENSEMBLE?
C'est un type de de variable, que tu as défini avec typedef.
Mais tu n'as pas déclaré de variable de ce type.
Un peu comme si tu faisais int->premier.
Pour ton parcours, ce serait plus clair avec un for:
|
Marsh Posté le 05-06-2006 à 18:40:32
Merci, il me donne mal à la tête ce programme j'ai pas réflechi.
Marsh Posté le 05-06-2006 à 19:37:49
J'ai un autre probleme.
Dans un fonction je fais un test pour savoir si un element appartient a un ensemble.Je fais ca avec un if/else or dans mon else une fois que j'ai je return 1 (vrai) je n'est plus besoin de continuer à chercher et j'aimerai savoir comme sortir de ma fonction en retournant 1.
Je pense que si je fais :
return 1;
return ();
cela va pas marcher, merci.
Marsh Posté le 05-06-2006 à 19:48:46
Liv83 a écrit : J'ai un autre probleme. |
Dès que tu fais "return 1", tu sors de ta fonction. Donc le 2° return est inutile et ne veut absolument rien dire.
Tu devrais commencer par penser à ouvrir ton bouquin de C !!!
Marsh Posté le 05-06-2006 à 16:14:42
>Boujour à tous je suis nouveau sur Hardware
>Je suis entrain de faire un programme C qui creer un arbre genealogique a partir d'un ficchier texte.
>Je dois faire une fonction ref_personne(prenom, nom) qui doit retourner la référence de la personne de nom nom et de prenom prenom. J'ai une erreur dans ma fonction.
>Voila des extrait de mon programme qui vous serons utiles pour me répondre.
/* Structure de type personne "PERSONNE" */
typedef struct personne PERSONNE;
struct personne
{
char nom[15];
char prenom[15];
char S;
struct
{
int jour;
int mois;
int annee;
}date_naissance;
PERSONNE * pere;
PERSONNE * mere;
};
/* Structure de type element "ELEMENT" */
typedef struct element ELEMENT;
struct element
{
PERSONNE * personne;
ELEMENT * suivant;
};
/* Structure de type ensemble "ENSEMBLE" */
typedef struct ensemble ENSEMBLE;
struct ensemble
{
ELEMENT * premier;
};
>Et voici ma fonction ref_personne[i]
/* Reference d'une personne */
PERSONNE ref_personne(char *nom, char* prenom)
{
ELEMENT * tmp;
PERSONNE * resultat;
tmp = ENSEMBLE -> premier; /*expected primary-expression before '->' token
int trouve = 0;
while (tmp != NULL && !trouve)
{
if ((strcmp(tmp->personne->nom, nom)==0) && (strcmp(tmp->personne->prenom, prenom)==0))
{
trouve = 1;
resultat = tmp->personne;
}
tmp = tmp->suivant;
}
return tmp;
}
tmp doit parcourir ma chaine pour verifier si c'est le bon mon et prenom, or mon erreur si situe au debut (erreur en commentaire) ou je veux metre tmp au debut de ma liste.
>J'espere vous avoir fourni assez d'éléments pour me répondre sinon j'attends vos remarques. Merci d'avance.
Cordialement Liv.