Suppression d'une cellule (Liste chainée)
got-2be
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Suppression d'une cellule (Liste chainée)
- Liste déroulante excel - Guide
- Forcer suppression fichier - Guide
- Liste déroulante en cascade - Guide
- Excel cellule couleur si condition texte - Guide
- Liste code ascii - Guide
1 réponse
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.
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.