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++ - Errore passaggio parametri con array di record
Forum - C/C++ - Errore passaggio parametri con array di record

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


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 19:17
Giovedì, 23/10/2014
Codice sorgente - presumibilmente C#

  1. void menu();//procedura menu
  2. int choose();//procedura scelta
  3. void gestione(int *c,int scelta,t_Dati *datianagrafici[]);//procedura che gestisce la banca dati
  4. void inserisci_dati(int *c,t_Dati *datianagrafici[]);//procedura che inserisci i dati dei clienti nella banca dati
  5. void ricerca_cognome(int *c,t_Dati *datianagrafici[]);//procedura che ricerca un cliente in base al cognome
  6.  
  7. /*Programma Principale*/
  8. int main(int argc,char ** argv)
  9. {
  10.     t_Dati datianagrafici[max];//array di record
  11.     int scelta;//variabile scelta
  12.     int c=0;//contatore dei clienti inseriti
  13.  
  14.     printf("\t\t\t--BANCA DATI STUDIO DENTISTICO--");
  15.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  16.  
  17.     do{
  18.  
  19.     menu();//procedura menu
  20.     scelta = choose();//procedura scelta
  21.     gestione(&c,scelta,&datianagrafici );//procedura che gestisce la banca dati
  22.     system("cls");//cancella lo schermo
  23.     }while(scelta!=3);//cicla fin quando non usciamo 3=exit
  24.  
  25.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  26.  
  27.     system("PAUSE");
  28.     return(0);
  29. }


ho messo solo un pezzo di codice perchè mi sembra inutile inserirlo tutto dato che l'errore è presente solo in questo pezzo. Innanzitutto datianagrafici è un array di record, voglio passarlo per riferimento ma mi da errore:
cannot convert `t_Dati (*)[100]' to `t_Dati**' for argument `3' to `void gestione(int*, int, t_Dati**)' ù
qualcuno potrebbe darmi una mano? grazie 8-|

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 7:31
Venerdì, 24/10/2014
Dovrebbe essere

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e quindi la chiamata

gestione(&c, scelta, datianagrafici);

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:33
Venerdì, 24/10/2014
Ho provato ma nulla, stesso errore

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:54
Venerdì, 24/10/2014
il problema sembra scomparire quando tolgo dal prototipo l' "*" diventando così:
void gestione(int *c, int scelta, t_Dati datianagrafici);
ma sembra che poi cambi proprio il senso, giusto?
mentre quando vado poi a sviluppare la procedura, è così:
void gestione(int *c, int scelta, t_Dati *datianagrafici){
----
return;
}

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:34
Venerdì, 24/10/2014
Cosa è t_Dati ? Se non lo mostri non si può capire ...

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:42
Venerdì, 24/10/2014
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define max 100
  5.  
  6. /*Variabili Globali*/
  7. //Record contenente i campi per l'importo
  8. typedef struct recImporti
  9.  {
  10.    float importo1;
  11.    float importo2;
  12.    float importo3;
  13.  }t_Importo;
  14.  
  15. //Record contenente i campi per le prestazioni
  16. typedef struct recPrestazioni
  17.  {
  18.    char Prestazioni1[20];
  19.    char Prestazioni2[20];
  20.    char Prestazioni3[20];
  21.  }t_Prestazioni;
  22. //Record contenente i campi per la data di nascita
  23. typedef struct recDatidiNascita
  24.  {
  25.      int Giorno;
  26.      char Mese[10];
  27.      int Anno;
  28.  }t_Data;
  29. //record contenente i dati anagrafici RECORD PRINCIPALE
  30. typedef struct recDatiAnagrafici
  31.  {
  32.     char Nome [12];
  33.     char Cognome [12];
  34.     char Telefono [9];
  35.     t_Data Nascita;//record nascita composto da 3 campi
  36.     t_Prestazioni prestazioni;//record prestazioni composto da 3 campi
  37.     t_Importo importo;//record importo composta da 3 campi
  38.  }t_Dati;
  39.  
  40. /*Prototipi Procedure*/
  41.  
  42. void menu();//procedura menu
  43. int choose();//procedura scelta
  44. void gestione(int *c,int scelta,t_Dati *datianagrafici[]);//procedura che gestisce la banca dati
  45. void inserisci_dati(int *c,t_Dati *datianagrafici[]);//procedura che inserisci i dati dei clienti nella banca dati
  46. void ricerca_cognome(int *c,t_Dati *datianagrafici[]);//procedura che ricerca un cliente in base al cognome
  47.  
  48. /*Programma Principale*/
  49. int main(int argc,char ** argv)
  50. {
  51.     t_Dati datianagrafici[max];//array di record
  52.     int scelta;//variabile scelta
  53.     int c=0;//contatore dei clienti inseriti
  54.  
  55.     printf("\t\t\t--BANCA DATI STUDIO DENTISTICO--");
  56.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  57.  
  58.     do{
  59.  
  60.     menu();//procedura menu
  61.     scelta = choose();//procedura scelta
  62.     gestione(&c,scelta,&datianagrafici);//procedura che gestisce la banca dati
  63.     system("cls");//cancella lo schermo
  64.     }while(scelta!=3);//cicla fin quando non usciamo 5=exit
  65.  
  66.     printf("\t\t\tPROGRAMMA REALIZZATO DA TOMMASO PERILLI");
  67.  
  68.     system("PAUSE");
  69.     return(0);
  70. }


adesso è più chiaro?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:25
Venerdì, 24/10/2014
Ti confermo che deve essere così

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e la chiamata

gestione(&c, scelta, datianagrafici);

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:23
Sabato, 25/10/2014
Testo quotato

Postato originariamente da nessuno:

Ti confermo che deve essere così

void gestione(int *c, int scelta, t_Dati *datianagrafici);

e la chiamata

gestione(&c, scelta, datianagrafici);


Ok ho risolto, penso che mi provocavano fastidio le parentesi []
comunque, esiste un modo per stampare un record in una botta sola? senza scrivere esplicitamente tutti i campi?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:04
Sabato, 25/10/2014
Scusami ma io ti avevo già detto nella prima risposta di togliere le parentesi quadre ...

No non puoi visualizzare tutta la struttura

Ultima modifica effettuata da il 25/10/2014 alle 18:05
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo