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: 6402
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: 6402
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: 6402
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: 6402
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