Qualcuno sa dirmi come si passano i parametri per i Record?![]()
Qualcuno sa dirmi come si passano i parametri per i Record?![]()
Che intendi con "Record" ?
No MP tecnici (non rispondo nemmeno!), usa il forum.
intendo questo:
codice:typedef struct recRubrica { char Cognome[10][10]; char Nome[10][10]; int Numero }t_Rubrica;
Se vuoi passare una struttura è bene usare un puntatore alla struttura
No MP tecnici (non rispondo nemmeno!), usa il forum.
che sarebbe questo:
per esempio, ho iniziato a fare una rubrica telefonica:codice:t_Rubrica rubrica
è incompleta ma il mio problema è il passaggio di parametri.. ho fatto un po' di testa mia nei parametri, puoi dirmi qualcosa?codice:#include <stdlib.h>#include <string.h> #define MAX 100 /*Variabili Globali*/ typedef struct recRubrica { char Cognome[10][10]; char Nome[10][10]; int Numero }t_Rubrica; /*Prototipi Procedure*/ void visualmenu(); void scelta(int *N); void iniazializzazione(t_Rubrica rubrica & Nome); void visualrubrica(t_Rubrica rubrica); void aggiungi(int *j,t_Rubrica rubrica); /*Programma Principale*/ int main() { t_Rubrica rubrica[MAX]; int n; int c=0; iniazializzazione(rubrica & Nome); do{ visualmenu(); scaleta(&n); gestione(n,&c,&rubica); system("PAUSE"); system("cls"); }while(n=!5); system("PAUSE"); return(0); } /*Procedure:*/ void iniazializzazione(t_Rubrica rubrica & Nome){ int i; for(i=0;i<MAX;i++) rubrica[i].*Nome[0][0] = 'x'; return; } void visualmenu(){ printf("\t\t\tRUBRICA TELEFONICA:"); printf("\n\n\t 1-Aggiungi nuova voce in rubrica"); printf("\n\n\t 2-Ricerca per nome"); printf("\n\n\t 3-Ricerca per cognome"); printf("\n\n\t 4-Stampa intera rubrica"); printf("\n\n\t 5-Esci"); return; } void scelta(int *N){ printf("\n\tInserisci scelta: "); scanf("%d",N); return; } void gestione(int n,int *c,t_Rubrica rubrica){ switch(n){ case 1: aggiungi(j,&rubrica); break; case 2: break; case 3: break; case 4: visualrubrica(&rubrica); breack; } return; } void aggiungi(int *j,t_Rubrica rubrica){ if(*j!=MAX){ printf("\n\tInserisci Nome: "); scanf("%s",rubrica[j].Nome); printf("\n\tInserisci Cognome: "); scanf("%s",rubrica[j].Cognome); printf("\n\tInserisci Numero telefonico: "); scanf("%s",rubrica[j].Numero); (*j)++; }else{ printf("\n\n\t\tMemoria piena"); } return; } void visualrubrica(t_Rubrica rubrica){ int i; printf("\n\tNOME \t- \tCOGNOME \t- \tNUMERO TELEFONICO"); for(i=0;i<MAX;i++){ if(rubrica[i].*Nome[0][0]!='x'){ printf("\n\t%s \t \t%s \t%d",rubrica[i].*Nome,rubrica[i].*Cognome,rubrica[i].*Numero); } } return; }
Intanto iniazializzazione è sbagliato come nome e non si capisce cosa intendi nei parametri con
che vuol dire & Nome ??codice:(t_Rubrica rubrica & Nome);
Infine, come ti dicevo, è bene che lavori con i puntatori quindi, ad esempio
e così viacodice:void Inizializzazione(t_Rubrica *rub)
No MP tecnici (non rispondo nemmeno!), usa il forum.
Quindi devo usare il puntatore e gli devo passare l'intera struttura? Non i campi? E il puntatore, nelle procedure, va sul nome della struttura o sul nome del campo?
Queste sono nozioni di base della programmazione C che trovi in qualsiasi libro, non nei forum. Non è possibile illustrare un capitolo sui "puntatori a struttura" in una risposta in un forum, per questo c'è il libro.
Fra l'altro, dalle affermazioni che fai, mi sa che dovresti ripassare anche le strutture.
Nessuno nasce "imparato" (anzi, tutti studiano dai libri) ma non ha senso andare "a tentoni", le nozioni vanno studiate e capite.
Con la typedef hai un nuovo "tipo di dato" quindi, dopo aver scritto il parametro come ti ho suggerito, passi la tua variabile per puntatore
Inizializzazione(&rubrica);
No MP tecnici (non rispondo nemmeno!), usa il forum.
ho modificato alcune cose come tu mi hai detto:
alcune cose ho risolto, altre invece no .. riscontro comunque problemi nel passaggio di parametricodice:#include <stdlib.h>#include <string.h> #define MAX 100 /*Variabili Globali*/ typedef struct recRubrica { char Cognome[10]; char Nome[10]; int Numero; }t_Rubrica; /*Prototipi Procedure*/ void visualmenu(); void scelta(int *N); void iniazializzazione(t_Rubrica *rubrica); void visualrubrica(t_Rubrica *rubrica); void aggiungi(int *c,t_Rubrica *rubrica); void gestione(int n,int *c,t_Rubrica *rubrica); /*Programma Principale*/ int main() { t_Rubrica rubrica[MAX]; int n; int c=0; iniazializzazione(&rubrica); do{ visualmenu(); scelta(&n); gestione(n,&c,&rubica); system("PAUSE"); system("cls"); }while(n=!5); system("PAUSE"); return(0); } /*Procedure:*/ void iniazializzazione(t_Rubrica *rubrica){ int i; for(i=0;i<MAX;i++) rubrica[i].Nome[0]= 'x'; return; } void visualmenu(){ printf("\t\t\tRUBRICA TELEFONICA:"); printf("\n\n\t 1-Aggiungi nuova voce in rubrica"); printf("\n\n\t 2-Ricerca per nome"); printf("\n\n\t 3-Ricerca per cognome"); printf("\n\n\t 4-Stampa intera rubrica"); printf("\n\n\t 5-Esci"); return; } void scelta(int *N){ printf("\n\tInserisci scelta: "); scanf("%d",N); return; } void gestione(int n,int *c,t_Rubrica *rubrica){ switch(n){ case 1: aggiungi(c,&rubrica); break; case 2: break; case 3: break; case 4: visualrubrica(&rubrica); break; } return; } void aggiungi(int *c,t_Rubrica *rubrica){ if(*c!=MAX){ printf("\n\tInserisci Nome: "); scanf("%s",&rubrica[*c].Nome); printf("\n\tInserisci Cognome: "); scanf("%s",&rubrica[*c].Cognome); printf("\n\tInserisci Numero telefonico: "); scanf("%s",&rubrica[*c].Numero); (*c)++; }else{ printf("\n\n\t\tMemoria piena"); } return; } void visualrubrica(t_Rubrica *rubrica){ int i; printf("\n\tNOME \t- \tCOGNOME \t- \tNUMERO TELEFONICO"); for(i=0;i<MAX;i++){ if(rubrica[i].Nome[0]!='x'){ printf("\n\t%s \t \t%s \t%d",rubrica[i].Nome,rubrica[i].Cognome,rubrica[i].Numero); } } return; }
Detta così non so cosa risponderti ... dovresti essere molto più preciso
No MP tecnici (non rispondo nemmeno!), usa il forum.