Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ricerca campo record in un file
Forum - C/C++ - Ricerca campo record in un file

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 12:27
Giovedì, 30/10/2014
Codice sorgente - presumibilmente C#

  1. void ricerca_cognome(t_Dati *datianagrafici){
  2.    
  3.  char cognome[12];//cognome da cercare all'interno della banca dati
  4.      char scelta[3];//scelta utente si/no
  5.      int found; //variabile sentinella
  6.      FILE *f;
  7.      
  8.      do{//ricerca il cliente in base al cognome
  9.      f = fopen("BancaDati.txt","r");
  10.      if(f==NULL){//se il file non esiste
  11.        printf("\nFile inesistente\n");
  12.        return;
  13.        }
  14.      found = 0;
  15.      printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: ");
  16.      scanf("%s",cognome);
  17.      fgets()
  18.      
  19.      
  20.      if(found==0){
  21.        printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome);
  22.        }
  23.      printf("\n\tVuoi cercare un altro cliente? ");
  24.      scanf("%s",scelta);
  25.      while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
  26.        printf("\n\tERRORE, INSERISCI SOLO si O no");
  27.        scanf("%s",scelta);
  28.        }
  29.      }while(strcmp(scelta,"si")==0);
  30.  
  31.      return;
  32.      }


allora io ho un file, in cui precedentemente ho aperto in modalità "a", e ho scritto il record:
Codice sorgente - presumibilmente C++

  1. typedef struct recDatiAnagrafici
  2.  {
  3.     char Nome [12];
  4.     char Cognome [12];
  5.     char Telefono [11];
  6.     t_Data Nascita;//record nascita composto da 3 campi
  7.     t_Prestazioni prestazioni;//record prestazioni composto da 3 campi
  8.     t_Importo importo;//record importo composta da 3 campi
  9.  }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:
Codice sorgente - presumibilmente Delphi

  1. Inizio
  2. Vis: “Come si chiamano di nome di battesimo le persone che devo trovare nel file?”
  3. Acq: nomecerc
  4. Apri il file in input
  5. Leggi primo record nel buffer buf
  6. trovati = 0
  7. Mentre non ho raggiunto lÂ’eof
  8. Se buf.nome = nomecerc
  9. Vis: buf.codfis, buf.cognome, buf.nome
  10. trovati = trovati + 1
  11. Finese
  12. Leggi prossimo record nel buffer buf
  13. FineMentre
  14. Chiudi il file
  15. Se trovati = 0 allora
  16. Vis: “Nessuna persona registrata all’interno di questo file si chiamava in quel modo”
  17. Finese
  18. Fine


ho provato a fare così:
Codice sorgente - presumibilmente C#

  1. void ricerca_cognome(){
  2.      char cognome[12];//cognome da cercare all'interno della banca dati
  3.      char scelta[3];//scelta utente si/no
  4.      int found; //variabile sentinella
  5.      FILE *f;
  6.      t_Dati buf;//record contenete i campi letti da file
  7.      
  8.      do{//ricerca il cliente in base al cognome
  9.      f = fopen("BancaDati.txt","r");
  10.      if(f==NULL){//se il file non esiste
  11.        printf("\nFile inesistente\n");
  12.        return;
  13.        }
  14.      printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: ");
  15.      scanf("%s",cognome);
  16.      fgets(buf,sizeof(buf),f);
  17.      found = 0;
  18.      while(!feof(f)){
  19.        if(strcmp(cognome,buf.Cognome)==0){
  20.                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);
  21.                found = 1;
  22.              }            
  23.      fgets(buf,sizeof(buf),f);
  24.      }
  25.      fclose(f);
  26.      if(found==0){
  27.        printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome);
  28.        }
  29.      printf("\n\tVuoi cercare un altro cliente? ");
  30.      scanf("%s",scelta);
  31.      while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){
  32.        printf("\n\tERRORE, INSERISCI SOLO si O no");
  33.        scanf("%s",scelta);
  34.        }
  35.      }while(strcmp(scelta,"si")==0);
  36.  
  37.      return;
  38.      }


ma la fgets mi da errore...

Ultima modifica effettuata da perillitommaso il 30/10/2014 alle 13:14
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:29
Giovedì, 30/10/2014
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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 13:37
Giovedì, 30/10/2014
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??

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:38
Giovedì, 30/10/2014
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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 13:40
Giovedì, 30/10/2014
cioè?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:44
Giovedì, 30/10/2014
Devi castare buf a puntatore a char

Ultima modifica effettuata da nessuno il 30/10/2014 alle 13: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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 13:46
Giovedì, 30/10/2014
e come si fa? :om:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:53
Giovedì, 30/10/2014
Ma come studiate in queste scuole?

fgets((char *) &buf, sizeof(buf), f);

Ultima modifica effettuata da nessuno il 30/10/2014 alle 14: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à.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 14:01
Giovedì, 30/10/2014
questa cosa la sto imparando da solo ahah comunque, devo copiare così come sta oppure dopo il * devo mettere qualcosa?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo