Probleme a la creation du fichier [C noobs inside] - C++ - Programmation
Marsh Posté le 09-04-2002 à 18:29:35
c paske tu l'ouvres en mode "wb"
le w signifie que tu l'ouvres en mode ecriture, mais ECRASE LE CONTENU PRECEDENT si le fichier existe
faut l'ouvrir en "w+" (donc dans ton cas puiske ca a l'air d'etre du binaire, le mode d'ouverture est "w+b"
Marsh Posté le 09-04-2002 à 19:22:16
w+ écrase le fichier aussi, il faut utiliser r+ si tu veux conserver l'ancien fichier.
[jfdsdjhfuetppo]--Message édité par neerd--[/jfdsdjhfuetppo]
Marsh Posté le 09-04-2002 à 19:29:29
neerd a écrit a écrit : w+ écrase le fichier aussi, il faut utiliser r+ si tu veux conserver l'ancien fichier. |
t sur de ca ???
sinon tu peux utiliser a+ aussi ...
Marsh Posté le 09-04-2002 à 19:32:51
j'ai sa d'écrit ds un bouquin mais pour être sûr j'ai fait un test et sauf si Dev-C++ et buggé sinon c'est le cas
Marsh Posté le 09-04-2002 à 19:36:14
ok autant pour moi ... c t un vague souvenir, ca fait un an que g pas fait de C ...
Marsh Posté le 09-04-2002 à 20:53:47
ouais je c mais en fait c pas le premier probleme il faut qu'il l'ecrase si on a le pass pour le faire
mais la il devrait s'arreter puisque pt ne peut pas etre a 0 vu qu'il y a un fichier exsistant et pourtant il rentre ds le if(pt==0) et ça c pas normal avant que j'ajoute ma fonction supprimer il me fesait pas ça, mais ça a rien avoir
Marsh Posté le 09-04-2002 à 20:56:42
Si j'ai bien compris ton code, pt est un pointeur, donc si tu veux savoir ca valleur c'est (*pt == 0) non?
Marsh Posté le 09-04-2002 à 21:51:23
ben oui c un pointeur sur fichier
declaré en FILE *pt
donc si le ficher exsiste pt prend une valeur et s'il n'exsiste pas il est logiqueùment a 0
mais la il rentre ds le if malgré la condition mais c pas normal
Marsh Posté le 09-04-2002 à 15:53:36
voila g un probleme le prog tourne plus ou moins mais bon il est pas finit...le probleme c que a chaque demarage il me reecrase le fichier exsistant alors que g mit une condition pour ça!!!
le code
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct bibli
{
int numero;
int volume;
char titre[20];
char auteur[20];
char edition[10];
char date[9];
};
struct biblise
{
int num;
int volu;
char titr[20];
char aut[20];
char edit[10];
char dat[9];
};
void creationprem (int);
void creationsec (int);
void affichf ();
void listprem (struct bibli,int);
void listsec (struct biblise,int);
void ajout (struct bibli,struct biblise,int);
int recherche (struct bibli,int);
void affich2 (struct bibli);
void supprimp (struct bibli,int,struct biblise,int);
int rechvide (struct biblise,int);
int rechsec (struct biblise,int);
void affich3 (struct biblise);
main()
{
FILE *pt,*ps;
int menu=0,listage=0,x,nbmaxfich=50,nbmaxse=40,pass=4849,code;
struct bibli vbib={0,0,"","",""};
struct biblise vbibse={0,0,"","",""};
char ecra='n';
clrscr();
if (pt==0)
{
creationprem(nbmaxfich);
creationsec (nbmaxse);
}
else
{
printf ("\nVoulez-vous ecraser les fichiers exsistants (o/n): " );
ecra=getche();
if (ecra=='o'
{
printf ("\nEntrez le passe: " );
scanf("%d",&code);
if (pass==code)
{
creationprem (nbmaxfich);
creationsec (nbmaxse);
}
else
{
printf("\nVous n'avez pas l'autorisation d'?craser les fichiers" ); getch();
}
}
}
clrscr();
printf ("\n\t\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍ»" );
printf ("\n\t\t\tº Application 2002 º B5 º" );
printf ("\n\t\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍͼ" );
printf ("\n\n\n\t Pour entrer dans le menu principal pressez ENTER " );
getch();
while (menu!=6)
{
clrscr();
printf ("\n \t\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»" );
printf ("\n \t\t\tº Menu principal º" );
printf ("\n \t\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ" );
printf ("\n\n\n\n\t1.Lister les fiches\n\t2.Ajouter une fiche" );
printf ("\n\t3.Supprimer une fiche\n\t4.Modifier une fiche" );
printf ("\n\t5.Rechercher une fiche\n\t6.Quitter le programme" );
printf ("\n\nVotre choix: " );
scanf ("%d",&menu);
switch (menu)
{
case 1: clrscr();
printf ("\n\n\n\t\t1.Lister le fichier primaire" );
printf ("\n\t\t2.Lister le fichier secondaire" );
printf ("\n\n\n\tVotre choix: " );
scanf ("%d",&listage);
switch (listage)
{
case 1: listprem (vbib,nbmaxfich);
break;
case 2: listsec (vbibse,nbmaxse);
break;
}
break;
case 2: clrscr();
printf ("\n\t\t\tAJOUT D'UNE FICHE" );
ajout(vbib,vbibse,nbmaxse);
break;
case 3: clrscr();
printf ("\n\t\t\tSUPPRESSION D'UNE FICHE" );
supprimp (vbib,nbmaxfich,vbibse,nbmaxse);
break;
case 4: clrscr();
printf ("\n\t\t\tMODIFICATION D'UNE FICHE" );
break;
case 5: clrscr();
printf ("\n\t\t\tRECHERCHE D'UNE FICHE" );
x=recherche(vbib,nbmaxfich);
if (x>=nbmaxfich+1)
{
ps=fopen("c:\\fich\\filesec.dat","rb" );
fseek(ps,(x-1)*sizeof(vbibse),0);
fread(&vbibse,sizeof(vbibse),1,ps);
affich3(vbibse);
getch();
fclose(ps);
}
else
{
pt=fopen("c:\\fich\\file.dat","rb" );
fseek(pt,(x-1)*sizeof(vbib),0);
fread(&vbib,sizeof(vbib),1,pt);
affich2(vbib);
getch();
fclose(pt);
}
break;
}
}
}
/*//////////////////////////////FONCTIONS/////////
///////////////////////*/
/*////////////////////CREATION DU FICHIER PRIMAIRE///////////////////////*/
void creationprem (int nbmaxfich)
{
FILE *pt;
struct bibli vbib={0,0,"","","",""};
int i;
pt=fopen("c:\\fich\\file.dat","wb" );
for (i=1;i<=nbmaxfich;i++)
{
fwrite(&vbib,sizeof(vbib),1,pt);
}
fclose(pt);
}
/*////////////////////////////////////////////////
////////////////////*/
void creationsec (int nbmaxse)
{
FILE *pt;
struct biblise vbibse={0,0,"","","",""};
int i;
pt=fopen("c:\\fich\\filsec.dat","wb" );
for (i=1;i<=nbmaxse;i++)
{
fwrite(&vbibse,sizeof(vbibse),1,pt);
}
fclose(pt);
}
/*////////////////////////////////////////////////
////////////////////*/
void affichf (void)
{
printf ("\nCl? volume titre auteur edition date" );
printf ("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄ" );
}
/*////////////////////////////////////////////////
////////////////////*/
void listprem (struct bibli vbib,int nbmaxfich)
{
FILE *pt;
int comp=0;
pt=fopen("c:\\fich\\file.dat","rb" );
while (comp<=nbmaxfich)
{
clrscr();
affichf();
do
{
comp++;
fread(&vbib,sizeof(vbib),1,pt);
printf ("\n%2d %5d %s %s %s %s",vbib.numero,
vbib.volume,vbib.titre,vbib.auteur,vbib.edition,vbib.date);
}
while (comp%20!=0);
printf ("\n\n\t\t\t//APPUYEZ SUR ENTER//" );
getch();
}
fclose(pt);
}
/*////////////////////////////////////////////////
//////////////////////*/
void listsec (struct biblise vbibse,int nbmaxse)
{
FILE *pt;
int comp=0;
pt=fopen("c:\\fich\\filsec.dat","rb" );
while (comp<=nbmaxse)
{
clrscr();
affichf();
do
{
comp++;
fread(&vbibse,sizeof(vbibse),1,pt);
printf ("\n%2d %5d %s %s %s %s",vbibse.num,
vbibse.volu,vbibse.titr,vbibse.aut,vbibse.edit,vbibse.dat);
}
while (comp%20!=0);
printf ("\n\n\t\t\t//APPUYEZ SUR ENTER//" );
getch();
}
fclose(pt);
}
/*////////////////////////////////////////////////
//////////////////////*/
void ajout (struct bibli vbib,struct biblise vbibse,int nbmaxse)
{
FILE *pt,*ps;
int i,cle=0,pad,pos;
pt=fopen("c:\\fich\\file.dat","r+b" );
do
{
printf ("\n\nVeuillez entrer un identifiant: " );
scanf ("%d",&cle);
pad=(cle%1000)+1;
fseek(pt,(pad-1)*sizeof(vbib),0);
fread(&vbib,sizeof(vbib),1,pt);
if (vbib.numero==cle)
{
clrscr();
printf ("\n\nCet idantifiant est deja utilis?" );
}
}
while (vbib.numero==cle);
if (vbib.numero!=0)
{
fclose(pt);
pos=rechvide (vbibse,nbmaxse);
ps=fopen("c:\\fich\\filsec.dat","r+b" );
fseek(ps,(pos)*sizeof(vbibse),0);
vbibse.num=cle;
printf ("\nEntrez le nø de volume: " );
scanf("%d",&vbibse.volu);
fflush(stdin);
printf ("\nEntrez le titre: " );
gets (vbibse.titr);
fflush(stdin);
printf ("\nEntrez le nom de l'auteur: " );
gets (vbibse.aut);
fflush(stdin);
printf ("\nEntrez le nom de l'editeur: " );
gets (vbibse.edit);
fflush(stdin);
printf ("\nEntrez la date: " );
gets (vbibse.dat);
fflush(stdin);
fwrite(&vbibse,sizeof(vbibse),1,ps);
fclose(ps);
}
else
{
pt=fopen("c:\\fich\\file.dat","r+b" );
fseek(pt,(pad-1)*sizeof(vbib),0);
vbib.numero=cle;
printf ("\nEntrez le nø de volume: " );
scanf("%d",&vbib.volume);
fflush(stdin);
printf ("\nEntrez le titre: " );
gets (vbib.titre);
fflush(stdin);
printf ("\nEntrez le nom de l'auteur: " );
gets (vbib.auteur);
fflush(stdin);
printf ("\nEntrez le nom de l'editeur: " );
gets (vbib.edition);
fflush(stdin);
printf ("\nEntrez la date: " );
gets (vbib.date);
fflush(stdin);
fwrite(&vbib,sizeof(vbib),1,pt);
fclose(pt);
}
}
/*////////////////////////////////////////////////////////////////////*/
int recherche (struct bibli vbib,int nbmaxfich)
{
FILE *pt;
int i,c,x;
char nom[30];
fflush(stdin);
printf ("\n\nEntrez le nom de la fiche a rechercher: " );
gets(nom);
fflush(stdin);
pt=fopen("c:\\fich\\file.dat","rb" );
for (i=0;i<=nbmaxfich+1 || c==0;i++)
{
fread(&vbib,sizeof(vbib),1,pt);
c=strcmp(vbib.titre,nom);
if(c==0)
{
x=(vbib.numero%1000)+1;
return(x);
}
if (i==nbmaxfich+1)
{
printf ("\n\nCe livre n'exsiste pas dans le fichier primaire" );
getch();
}
}
}
/*///////////////////////////////////////////////////////////////////*/
int rechvide (struct biblise vbibse,int nbmaxse)
{
FILE *pt;
int i;
pt=fopen("c:\\fich\\filsec.dat","rb" );
for (i=0;i<=nbmaxse+1 || vbibse.num==0;i++)
{
fread(&vbibse,sizeof(vbibse),1,pt);
if(vbibse.num==0)
{
return(i);
}
if (i==nbmaxse+1)
{
printf ("\n\nLe fichier est plein, impossible d'ajouter une fiche" );
getch();
}
}
fclose(pt);
}
/*///////////////////////////////////////////////////////////////////*/
void affich2 (struct bibli vbib)
{
clrscr();
printf ("\nIdentifiant: %d",vbib.numero);
printf ("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ" );
printf ("\nNøde volume : %d",vbib.volume);
printf ("\nTitre : %s",vbib.titre);
printf ("\nAuteur : %s",vbib.auteur);
printf ("\nEdition : %s",vbib.edition);
printf ("\nDate : %s",vbib.date);
}
/*////////////////////////////////////////////////
///////////////////*/
void affich3 (struct biblise vbibse)
{
clrscr();
printf ("\nIdentifiant: %d",vbibse.num);
printf ("\nÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ" );
printf ("\nNøde volume : %d",vbibse.volu);
printf ("\nTitre : %s",vbibse.titr);
printf ("\nAuteur : %s",vbibse.aut);
printf ("\nEdition : %s",vbibse.edit);
printf ("\nDate : %s",vbibse.dat);
}
/*////////////////////////////////////////////////
///////////////////*/
void supprimp (struct bibli vbib,int nbmaxfich,struct biblise vbibse,int nbmaxse)
{
FILE *pt,*ps;
int pad;
char rep;
pad=recherche(vbib,nbmaxfich);
if (pad>=nbmaxfich+1)
{
pad=rechsec(vbibse,nbmaxse);
if (pad<nbmaxse+1)
{
printf ("\n\nVOULEZ VOUS VRAIMENT SUPPRIMER CETTE FICHE (o/n)" );
rep=getche();
if (rep=='o'
{
ps=fopen("c:\\fich\\file.dat","r+b" );
fseek(ps,(pad-1)*sizeof(vbibse),0);
vbibse.num=0;
fwrite(&vbibse,sizeof(vbibse),1,ps);
clrscr();
printf ("\nCette fiche a ?t? supprim?e." );
getch();
}
else
{
clrscr();
printf ("\n\n\nSuppression annul?e." );
}
}
}
else
{
if (pad<nbmaxfich+1)
{
printf ("\n\nVOULEZ VOUS VRAIMENT SUPPRIMER CETTE FICHE (o/n)" );
rep=getche();
if (rep=='o'
{
pt=fopen("c:\\fich\\file.dat","r+b" );
fseek(pt,(pad-1)*sizeof(vbib),0);
vbib.numero=0;
fwrite(&vbib,sizeof(vbib),1,pt);
clrscr();
printf ("\nCette fiche a ?t? supprim?e." );
getch();
}
else
{
clrscr();
printf ("\n\n\nSuppression annul?e." );
}
}
}
fclose(pt);
}
/*////////////////////////////////////////////////
/////////////////////*/
int rechsec (struct biblise vbibse,int nbmaxse)
{
FILE *pt;
int i,c;
char nom[30];
fflush(stdin);
printf ("\n\nEntrez le nom de la fiche a rechercher: " );
gets(nom);
fflush(stdin);
pt=fopen("c:\\fich\\filsec.dat","rb" );
for (i=0;i<=nbmaxse+1 || c==0;i++)
{
fread(&vbibse,sizeof(vbibse),1,pt);
c=strcmp(vbibse.titr,nom);
if(c==0)
{
return(i);
}
if (i==nbmaxse+1)
{
printf ("\n\nCe livre n'exsiste pas" );
getch();
}
}
}
/*//////////////////////////////////////////////////////////////////////*/
[jfdsdjhfuetppo]--Message édité par bistou--[/jfdsdjhfuetppo]
---------------
:sol: