Supprimer une structure dans un fichier

Bonjour,
je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas.
Voila mon code, j'ai essayé un truc mais ca fonctionne pas super bien

Code C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FFL fflush(stdin)

struct ordinateur
{
char type_proc[20];
char vitesse_proc[20];
char ram[20];
char HD[20];
char annee[20];
};

struct carnet
{
struct ordinateur nbpc[50];
int compteur;
};

void saisie(FILE*fichier,/*FILE*fichieran,*/struct ordinateur *pc);
void saisieannee(FILE*fichier,/* FILE*fichieran, */struct ordinateur *pc);
void affichage(FILE*fichier);
void suppression(FILE*fichier, struct ordinateur *pc);

int main(void)
{
FILE*fichier=NULL;
fichier=fopen("ordinateur.lst","a");
struct ordinateur pc;
int option;
do
{
printf("\tMenu");
printf("1: Saisie des caracteristiques d'un ordinateur.\n2: Tri des ordinateurs en fonction des annees.\n3: Affichage d'un des fichiers.\n4: Supprimer un ordinateur d'une liste.");
scanf("%d",&option);
switch (option)
{
case 1:
saisie(fichier/*,fichieran*/,&pc);
break;

case 2:
saisieannee(fichier/*,fichieran*/,&pc);
break;

case 3:
affichage(fichier);
break;

case 4:
suppression(fichier,&pc);
break;
}

}
while (1);
return 0;

}
void saisie(FILE*fichier/*,FILE*fichieran*/, struct ordinateur *pc)
{

if (fichier==NULL)
puts("probleme a l'ouverture du fichier");
else
{
fichier=fopen("ordinateur.lst","a");
FFL;
puts("quelle est l'annee d'achat");
FFL;
gets((*pc).annee);
fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
FFL;
puts("quelle est le type du processeur");
FFL;
gets((*pc).type_proc);
fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
puts("quelle est la vitesse du processeur");
FFL;
gets((*pc).vitesse_proc);
fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
FFL;
puts("quelle est la taille de la memoire vive");
FFL;
gets((*pc).ram);
fprintf(fichier, "taille ram: %s\n", (*pc).ram);
FFL;
puts("quelle est la taille du disque dur");
FFL;
gets((*pc).HD);
fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);

fclose(fichier);

}
}

void saisieannee(FILE*fichier/*,FILE*fichieran*/,struct ordinateur *pc)
{
char chaine[5000] = "";
fichier=fopen("ordinateur.lst","r");
if (fichier != NULL)
{
while (fgets(chaine, 5000, fichier) != NULL)
{
printf("%s", chaine);
}
fclose(fichier);
}

char year[5];
char date[20];
FFL;
puts("entrez la date");
gets(date);
char ordi[20]="ordi";
char nfichier[20];
char lst[6]=".lst";
strcpy(nfichier,ordi);
strcat(nfichier,date);
strcat(nfichier,lst);
printf("le nom du fichier est: %s\n",nfichier);

if (strcmp(date,(*pc).annee)==0)
{
fichier=fopen(nfichier,"a");

fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
fprintf(fichier, "taille ram: %s\n", (*pc).ram);
fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);

fclose(fichier);
}
}

void affichage(FILE*fichier)
{
char name[20];
int caractuel = 0;
puts("quel fichier voulez vous ouvrir(tapez le nom exact)");
FFL;
gets(name);
fichier = fopen(name,"r");

if (fichier != NULL)
{

do
{
caractuel = fgetc(fichier);
printf("%c", caractuel);
}
while (caractuel != EOF);
fclose(fichier);

}

}

void suppression(FILE*fichier,struct ordinateur *pc)
{
int caractereActuel = 0;
char chaine[2000];

char year[20];
FILE*fichier2;
fichier = fopen("ordinateur.lst", "r");
/* puts("quelle est l'annee d'achat de l'ordinateur a supprimer?");
FFL;
gets(year);
printf("l'annee d'achat du pc a supprimer est: %s",year);
*/
fichier2=fopen("tempo.lst","w");
char ligne[256];
int i=0;

rewind(fichier);
while (fread(&(*pc),sizeof(struct ordinateur),1,fichier) && !feof(fichier))
{
if (strcmp((*pc).annee,"1999")==0)
{
fseek(fichier,sizeof(struct ordinateur),SEEK_CUR);

}
fwrite(&(*pc),sizeof(struct ordinateur),1,fichier2);
}
fclose(fichier);
fclose(fichier2);

/*fgets(ligne, sizeof ligne, fichier);

printf("%s\n",ligne);
if (strcmp(year,(*pc).annee)==0)
{
fputs(ligne, fichier2);

} */

/* while (fgets(ligne, sizeof ligne, fichier))
{
if (ligne[15] != '\n')
{
// ligne[0]=" ";

fputs(ligne, fichier2);
} }

/*
char chaine[20000] = "";
char year[5];
fgets(chaine, TAILLE_MAX, fichier);
printf("%s", chaine);
fseek(f, 0L, SEEK_SET);
for(i = 0; i < year; i++)
getc(f);
*/
}
Configuration: Windows Vista
Firefox 3.5.7

1 réponse

  1. Modérateur
    Fort bien, mais quelle structure veux-tu supprimer ? Et comment envisages tu de la remplacer ? Car il va falloir arranger ou supprimer toutes les fonctions dans lesquelles la structure apparaît.

    Bonne chance
    0

    Discussions similaires

    question pix mot caché

    7 réponses