Ho scritto un piccolo programma in C (come esercizio) .
Ora sono bloccato su un dubbio .
Posso dare dei parametri alla fread per cercare un record specifico nelfile dat ?
Questo è il codice che ho scritto .
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STORE_FILE "store.dat"
#define READ_FILE "read.txt"
typedef struct{ //dato strtutturato
char libro[50];
char autore[50];
}libro;
main(){
char ty;{ //char menù
printf("\n\t----------------------");
printf("\n\t-Menu'di scelta- ");
printf("\n\t----------------------");
printf("\n\t1-Inserisci libro ");
printf("\n\t2-leggi dati ");
printf("\n\t3-Esci ");
printf("\n\t4-Leggi elenco anagrafica");
printf("\n5-Cerca per autore:");
}
printf("\n\t----------------------");
printf("\n\t-Scelta : ",ty);
printf("\n\t=>");
ty=getchar();
getchar(); //riga che annulla l'invio dopo la scelta (riga inutile).
switch (ty) {
case '1':
FILE *fp;
libro l;
int i;
if(!(fp=fopen(STORE_FILE,"a+b"))){
printf("\nErrore scrittura file%s",STORE_FILE);
exit(1);
}
else
printf("\n\t\t==>Iserisci<== ");
printf("\n-Autore:"); //scrivoi dati
gets(l.autore);
printf("\n-Titolo:");
gets(l.libro);
if(fwrite(&l,sizeof(l),1,fp)>0){ //Scrivo il file binario
printf("\nDati scritti OK");
printf("\n----------------");
fclose(fp);
}
{
FILE *fp ;
fp= fopen("read.txt","a+"); //Scrivo il file testuale read.txt
fprintf(fp,"\nAutore:%s\t\tTitilo libro:%s",l.autore,l.libro);
fclose (fp);
}
return main(); //ritorno alla funzione principale main
break;
case'2':
if(!(fp=fopen(STORE_FILE,"rb"))){ //legggo il file binario
printf("\n errore di lettura dei dati%s ",STORE_FILE);
exit(1);
}
while(fread(&l,sizeof(l),1,fp)>0){
printf("\n-Autore:%s",l.autore);
printf("\n-Titolo:%s",l.libro);
printf("\n------------");
i++;
}
{
int c;
c=i-55;
printf("\n=================");
printf("\n-Titoli letti :%d\n",c);
printf("\n=================");
fclose(fp);
return main() ; //torno al main ()
break ;
}
case '3':
exit(1); // usicta dal programma
break;
case '4':
system ("start notepad.exe read.txt");
return main(); // torno al main()
break;
}
return 0;
}