Les enregistrments et fichiers
Fermé
leilamoncif
Messages postés
5
Date d'inscription
samedi 31 janvier 2015
Statut
Membre
Dernière intervention
25 mai 2015
-
Modifié par leilamoncif le 25/05/2015 à 15:02
pp25770 Messages postés 15 Date d'inscription samedi 8 septembre 2012 Statut Membre Dernière intervention 11 juin 2015 - 26 mai 2015 à 23:03
pp25770 Messages postés 15 Date d'inscription samedi 8 septembre 2012 Statut Membre Dernière intervention 11 juin 2015 - 26 mai 2015 à 23:03
A voir également:
- Les enregistrments et fichiers
- Wetransfer gratuit fichiers lourd - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Explorateur de fichiers - Guide
- Fichiers bin - Guide
- Fichiers epub - Guide
1 réponse
pp25770
Messages postés
15
Date d'inscription
samedi 8 septembre 2012
Statut
Membre
Dernière intervention
11 juin 2015
1
26 mai 2015 à 23:03
26 mai 2015 à 23:03
1 : le seul parametres de la fonction remplir doit être FILE *fichier qui sera fourni par le main remplir(fic);
2 : la fonction sauvegarde est inutile car il suffira de remplacer sauvgarder(...) par ton fprintf(fichier, "%s\n%s\n%d\n%s\n%s%f", ...)
3 : remplace fsacnf(fich,"%d",&choix); par scanf("%d",&choix);
4 : tes fonctions de recherche ne devraient pas avoir de paramètre car ils devraient se trouver dans les fonctions. Toutefois, tu peux remplacer
char *title par char title[20]
char *day char day[20]
char *month par char month[20]
Déclarer un pointeur est seulement une boite à adresse et non un contenant. Comme tu veux les utiliser dans tes fonctions, il faut une place. Erreur classique.
5 : enlever le caractere & des fonctions de recherche
6 : enlever le antislashN dans la la fonction remplir(), scanf("%s",L[i].dat.jour);
7 dans les f() de recherche lorsque la condition est vraie, utilise des accolades pour le if pour y ajouter l'instruction break; car quel que soit la condition, l'instruction return rep; sera également exécutée.
int rech...()
{
int i, rep = -1;
...
for()
{
if (vrai)
{
rep = i;
break;
}
}
return rep;
}
8: dans main(), remplace while(!feof(fich)) par while(1)
car tes recherches ne se font que dans la mémoire du tableau et donc la ré-ouverture de ton fichier est inutile.
9 : deplacer scanf("%d",&choix); après le menu.
Tout n'est pas corriger, car tu va être confrontée aux espaces pendant la lecture des chaines de caractères. scanf s'arrête dès qu'il voit un espace.
Ce qui donnerait :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define LMAX 20
typedef struct date
{
char jour [9];
char mois[13];
int annee;
}D;
typedef struct livre
{
char auteur[10];
char titre[10];
float prix;
D dat;
}livres;
livres L[LMAX];
void remplir(FILE *fichier)
{
int i;
for(i=0;i<LMAX;i++)
{
printf("\nentrer le jour de l'apparition du livre:");
scanf("%s",L[i].dat.jour);
printf("entrer le mois de l'apparition du livre:");
scanf("%s",L[i].dat.mois);
printf("entrer l'annee de l'apparition du livre:");
scanf("%d",&L[i].dat.annee);
printf("entrer l'auteur du livre:");
scanf("%s",L[i].auteur);
printf("entrer le titre du livre:");
scanf("%s",L[i].titre);
printf("entrer le prix du livre:");
scanf("%f",&L[i].prix);
fprintf(fichier, "%s\n%s\n%d\n%s\n%s\n%.2f\n",&L[i].dat.jour,&L[i].dat.mois,L[i].dat.annee,&L[i].auteur,&L[i].titre,L[i].prix);
}
}
int recherche_par_titre(char *tr)
{
int rep=-1,i;
puts("donner le livre que vous voulez chercher par");
printf("titre:");
scanf("%s",tr);
for(i=0;i<LMAX;i++)
{
if(strcmp(L[i].titre,tr)==0)
{
rep=i;
break;
}
}
return (rep);
}
int recherche_par_dete_achat(char *jr,char*ms,int ann)
{
int i,rep=-1;
puts("donner le livre que vous voulez chercher par");
printf("jour:");
gets(jr);
printf("mois:");
gets(ms);
printf("annee:");
scanf("%d",&ann);
for(i=0;i<LMAX;i++)
{
if((strcmp(L[i].dat.jour,jr)==0)&&(strcmp(L[i].dat.mois,ms)==0)&&(L[i].dat.annee==ann))
{
rep=i;
break;
}
}
return (rep);
}
int recherche_par_prix(float pr)
{
int i,rep=-1;
puts("donner le livre que vous voulez chercher par");
printf("prix:");scanf("%f",&pr);
for(i=0;i<LMAX;i++)
{
if(L[i].prix==pr)
{
rep=i;
break;
}
}
return (rep);
}
void main()
{
FILE *fich;
char nomfichier[]="BASE.txt";
int y;
char day[20];
char month[20];
int year;
char title[20];
float price;
char *jj,*mm,*tt,*au;
int aa;
float px;
int choix;
fich=fopen(nomfichier,"w");
if(!fich)
{
printf("impossible d'ouvrir le fichier :%s",nomfichier);
exit(-1);
}
remplir(fich);
fclose (fich);
while(1)
{
printf("si vous voulez chercher par titre tapez 1\n");
printf("si vous voulez chercher par date d'achat tapez 2\n");
printf("si vous voulez chercher par prix tapez 3\n");
printf("si vous voulez quittez tapez 0\n");
printf("votre choix :");
scanf("%d",&choix);
switch (choix)
{
case 1:printf("%d",y=recherche_par_titre(title));break;
case 2:printf("%d",y=recherche_par_dete_achat(day,month,year));break;
case 3:printf("%d",y=recherche_par_prix(price));break;
case 4:puts("au revoir");
default:puts("choix non autorise");exit (0);
}
}
getch();
}
2 : la fonction sauvegarde est inutile car il suffira de remplacer sauvgarder(...) par ton fprintf(fichier, "%s\n%s\n%d\n%s\n%s%f", ...)
3 : remplace fsacnf(fich,"%d",&choix); par scanf("%d",&choix);
4 : tes fonctions de recherche ne devraient pas avoir de paramètre car ils devraient se trouver dans les fonctions. Toutefois, tu peux remplacer
char *title par char title[20]
char *day char day[20]
char *month par char month[20]
Déclarer un pointeur est seulement une boite à adresse et non un contenant. Comme tu veux les utiliser dans tes fonctions, il faut une place. Erreur classique.
5 : enlever le caractere & des fonctions de recherche
6 : enlever le antislashN dans la la fonction remplir(), scanf("%s",L[i].dat.jour);
7 dans les f() de recherche lorsque la condition est vraie, utilise des accolades pour le if pour y ajouter l'instruction break; car quel que soit la condition, l'instruction return rep; sera également exécutée.
int rech...()
{
int i, rep = -1;
...
for()
{
if (vrai)
{
rep = i;
break;
}
}
return rep;
}
8: dans main(), remplace while(!feof(fich)) par while(1)
car tes recherches ne se font que dans la mémoire du tableau et donc la ré-ouverture de ton fichier est inutile.
9 : deplacer scanf("%d",&choix); après le menu.
Tout n'est pas corriger, car tu va être confrontée aux espaces pendant la lecture des chaines de caractères. scanf s'arrête dès qu'il voit un espace.
Ce qui donnerait :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define LMAX 20
typedef struct date
{
char jour [9];
char mois[13];
int annee;
}D;
typedef struct livre
{
char auteur[10];
char titre[10];
float prix;
D dat;
}livres;
livres L[LMAX];
void remplir(FILE *fichier)
{
int i;
for(i=0;i<LMAX;i++)
{
printf("\nentrer le jour de l'apparition du livre:");
scanf("%s",L[i].dat.jour);
printf("entrer le mois de l'apparition du livre:");
scanf("%s",L[i].dat.mois);
printf("entrer l'annee de l'apparition du livre:");
scanf("%d",&L[i].dat.annee);
printf("entrer l'auteur du livre:");
scanf("%s",L[i].auteur);
printf("entrer le titre du livre:");
scanf("%s",L[i].titre);
printf("entrer le prix du livre:");
scanf("%f",&L[i].prix);
fprintf(fichier, "%s\n%s\n%d\n%s\n%s\n%.2f\n",&L[i].dat.jour,&L[i].dat.mois,L[i].dat.annee,&L[i].auteur,&L[i].titre,L[i].prix);
}
}
int recherche_par_titre(char *tr)
{
int rep=-1,i;
puts("donner le livre que vous voulez chercher par");
printf("titre:");
scanf("%s",tr);
for(i=0;i<LMAX;i++)
{
if(strcmp(L[i].titre,tr)==0)
{
rep=i;
break;
}
}
return (rep);
}
int recherche_par_dete_achat(char *jr,char*ms,int ann)
{
int i,rep=-1;
puts("donner le livre que vous voulez chercher par");
printf("jour:");
gets(jr);
printf("mois:");
gets(ms);
printf("annee:");
scanf("%d",&ann);
for(i=0;i<LMAX;i++)
{
if((strcmp(L[i].dat.jour,jr)==0)&&(strcmp(L[i].dat.mois,ms)==0)&&(L[i].dat.annee==ann))
{
rep=i;
break;
}
}
return (rep);
}
int recherche_par_prix(float pr)
{
int i,rep=-1;
puts("donner le livre que vous voulez chercher par");
printf("prix:");scanf("%f",&pr);
for(i=0;i<LMAX;i++)
{
if(L[i].prix==pr)
{
rep=i;
break;
}
}
return (rep);
}
void main()
{
FILE *fich;
char nomfichier[]="BASE.txt";
int y;
char day[20];
char month[20];
int year;
char title[20];
float price;
char *jj,*mm,*tt,*au;
int aa;
float px;
int choix;
fich=fopen(nomfichier,"w");
if(!fich)
{
printf("impossible d'ouvrir le fichier :%s",nomfichier);
exit(-1);
}
remplir(fich);
fclose (fich);
while(1)
{
printf("si vous voulez chercher par titre tapez 1\n");
printf("si vous voulez chercher par date d'achat tapez 2\n");
printf("si vous voulez chercher par prix tapez 3\n");
printf("si vous voulez quittez tapez 0\n");
printf("votre choix :");
scanf("%d",&choix);
switch (choix)
{
case 1:printf("%d",y=recherche_par_titre(title));break;
case 2:printf("%d",y=recherche_par_dete_achat(day,month,year));break;
case 3:printf("%d",y=recherche_par_prix(price));break;
case 4:puts("au revoir");
default:puts("choix non autorise");exit (0);
}
}
getch();
}