Oppure

Loading
30/10/14 11:27
perillitommaso
void ricerca_cognome(t_Dati *datianagrafici){
    
 char cognome[12];//cognome da cercare all'interno della banca dati
     char scelta[3];//scelta utente si/no
     int found; //variabile sentinella
     FILE *f;
     
     do{//ricerca il cliente in base al cognome
     f = fopen("BancaDati.txt","r");
     if(f==NULL){//se il file non esiste
       printf("\nFile inesistente\n");
       return;
       }
     found = 0;
     printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: ");
     scanf("%s",cognome);
     fgets()
     
     
     if(found==0){
       printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome);
       }
     printf("\n\tVuoi cercare un altro cliente? ");
     scanf("%s",scelta);
     while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
       printf("\n\tERRORE, INSERISCI SOLO si O no");
       scanf("%s",scelta);
       }
     }while(strcmp(scelta,"si")==0);

     return;
     }

allora io ho un file, in cui precedentemente ho aperto in modalità "a", e ho scritto il record:
typedef struct recDatiAnagrafici
 {
    char Nome [12];
    char Cognome [12];
    char Telefono [11];
    t_Data Nascita;//record nascita composto da 3 campi
    t_Prestazioni prestazioni;//record prestazioni composto da 3 campi
    t_Importo importo;//record importo composta da 3 campi
 }t_Dati;

con la fprintf. il problema è che adesso dovrei ricercare nella banca data un cliente in base al cognome, e stampare poi i suoi dati in caso di successo, in caso di insuccesso devo far visualizzare un messaggio di errore ma non è quello il problema, non so come ricercare, ho trovato questa cosa su internet:
Inizio
Vis: “Come si chiamano di nome di battesimo le persone che devo trovare nel file?”
Acq: nomecerc
Apri il file in input
Leggi primo record nel buffer buf
trovati = 0
Mentre non ho raggiunto lÂ’eof
Se buf.nome = nomecerc
Vis: buf.codfis, buf.cognome, buf.nome
trovati = trovati + 1
Finese
Leggi prossimo record nel buffer buf
FineMentre
Chiudi il file
Se trovati = 0 allora
Vis: “Nessuna persona registrata all’interno di questo file si chiamava in quel modo”
Finese
Fine

ho provato a fare così:
void ricerca_cognome(){
     char cognome[12];//cognome da cercare all'interno della banca dati
     char scelta[3];//scelta utente si/no
     int found; //variabile sentinella
     FILE *f;
     t_Dati buf;//record contenete i campi letti da file
     
     do{//ricerca il cliente in base al cognome
     f = fopen("BancaDati.txt","r");
     if(f==NULL){//se il file non esiste
       printf("\nFile inesistente\n");
       return;
       }
     printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: ");
     scanf("%s",cognome);
     fgets(buf,sizeof(buf),f);
     found = 0;
     while(!feof(f)){
       if(strcmp(cognome,buf.Cognome)==0){
               printf("\n\t%s %s %s %d %s %d %s %2.f %s %2.f %s %2.f",buf.Nome,buf.Cognome,buf.Telefono,buf.Nascita.Giorno,buf.Nascita.Mese,buf.Nascita.Anno,buf.prestazioni.Prestazioni1,buf.importo.importo1,buf.prestazioni.Prestazioni2,buf.importo.importo2,buf.prestazioni.Prestazioni3,buf.importo.importo3);
               found = 1;
             }             
     fgets(buf,sizeof(buf),f);
     }
     fclose(f);
     if(found==0){
       printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome);
       }
     printf("\n\tVuoi cercare un altro cliente? ");
     scanf("%s",scelta);
     while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
       printf("\n\tERRORE, INSERISCI SOLO si O no");
       scanf("%s",scelta);
       }
     }while(strcmp(scelta,"si")==0);

     return;
     }

ma la fgets mi da errore...
Ultima modifica effettuata da perillitommaso 30/10/14 12:14
aaa
30/10/14 12:29
nessuno
Dire che qualcosa ti dà errore non significa nulla ...

Quale errore specifico?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
30/10/14 12:37
perillitommaso
cannot convert `t_Dati' to `char*' for argument `1' to `char* fgets(char*, int, FILE*)'
dovrei utilizzare una variabile stringa al posto di buf che è di tipo t_Dati??
aaa
30/10/14 12:38
nessuno
No, devi semplicemente usare un cast
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
30/10/14 12:40
perillitommaso
cioè?
aaa
30/10/14 12:44
nessuno
Devi castare buf a puntatore a char
Ultima modifica effettuata da nessuno 30/10/14 12:45
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
30/10/14 12:46
perillitommaso
e come si fa? :om:
aaa
30/10/14 12:53
nessuno
Ma come studiate in queste scuole?

fgets((char *) &buf, sizeof(buf), f);
Ultima modifica effettuata da nessuno 30/10/14 13:02
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.