Suppression d'une cellule (Liste chainée)

Fermé
got-2be Messages postés 1 Date d'inscription lundi 12 juillet 2010 Statut Membre Dernière intervention 3 mai 2013 - 3 mai 2013 à 14:14
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 4 mai 2013 à 08:29
Bonjour,

Je suis débutant en C et réalise un programme de gestion de stock.
Je cherche à écrire une fonction permettant de supprimer un article de ma liste et du fichier dans lequel tous les articles sont écrits.

Voici mes structures:

struct composant
{
char nom[MAX];
int prixunitaire;
int codebarre;
int quantite;
};
typedef struct composant sComposant;

void saisirComposant(sComposant *leComposant);
void afficherComposant(sComposant leComposant);
void sauverComposant(sComposant leComposant);
sComposant chargerComposant(FILE *fic);


struct celluleComposant
{
sComposant unComposant;
struct celluleComposant *suivantComposant;
};
typedef struct celluleComposant sCelluleComposant;
typedef struct celluleComposant * pCelluleComposant;

J'ai initialisé un pCelluleComposant debutdelaListeComposant qui pointe vers le 1er element de la liste.

Ma fonction:
void supprimerComposant (pCelluleComposant *debutdelaListeComposant)
{
pCelluleComposant courantComposant=(*debutdelaListeComposant);
pCelluleComposant tmp=(*debutdelaListeComposant);
sComposant leComposant;
int codebarrecourant;
FILE *fic;

if((fic=fopen(FIC_COMP, "a+")) == NULL)
{
printf("supprimerComposant: Impossible d'ouvrir le fichier %s", FIC_COMP);
exit(0);
}
do
{
printf("Quel est le code barre du composant a supprimer? /n ");
scanf("%d", &codebarrecourant);
}
while (rechercheListeComposant(*debutdelaListeComposant, codebarrecourant)!=1);

if(courantComposant != NULL)
{
while((courantComposant->suivantComposant!=NULL) && ((courantComposant->unComposant).codebarre!=codebarrecourant))
{
tmp=courantComposant;
courantComposant=courantComposant->suivantComposant;
}
if((courantComposant->unComposant).codebarre==codebarrecourant)
{
if((*debutdelaListeComposant)==courantComposant)
{
(*debutdelaListeComposant)=(courantComposant->suivantComposant);
}
else
{
tmp->suivantComposant=courantComposant->suivantComposant;
}
free (courantComposant);
}



while(!feof(fic))
{
leComposant=chargerComposant(fic);
fprintf(fic, "%s %d %d %d\n", (leComposant).nom, (leComposant).codebarre, (leComposant).quantite, (leComposant).prixunitaire);
}
fclose(fic);
fflush(stdin);
}
}

N'hésitez pas à me proposer des idées de recherche quant à l'erreur, le débugger se stop sur la déclaration de mon pCelluleComposant courantComposant

Merci
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
4 mai 2013 à 08:29
Bonjour,
while(!feof(fic))
feof() n'est pas une condition de fin de fichier. Utilise plutôt les lectures de contenu de fichiers classiques.

fflush(stdin); -> à ne pas utiliser. Il faut lire avec getchar() jusqu'à rencontrer un '\n' ou EOF.

N'hésitez pas à me proposer des idées de recherche quant à l'erreur, le débugger se stop sur la déclaration de mon pCelluleComposant courantComposant
C'est vraiment le debuggueur ou s'agit-il du compilateur ? Autrement dit, l'erreur tu l'obtiens à l'exécution ou à la compilation. Si c'est à la compilation, merci de nous dire les messages d'erreur/warning.
0