PDA

Visualizza la versione completa : [C]passaggio di parametri Record?


andrea2014
24-05-2014, 15:06
Qualcuno sa dirmi come si passano i parametri per i Record? :bh:

oregon
24-05-2014, 15:07
Che intendi con "Record" ?

andrea2014
24-05-2014, 15:24
intendo questo:

typedef struct recRubrica {
char Cognome[10][10];
char Nome[10][10];
int Numero
}t_Rubrica;

oregon
24-05-2014, 15:25
Se vuoi passare una struttura bene usare un puntatore alla struttura

andrea2014
24-05-2014, 15:35
che sarebbe questo:

t_Rubrica rubrica
per esempio, ho iniziato a fare una rubrica telefonica:

#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;
}



incompleta ma il mio problema il passaggio di parametri.. ho fatto un po' di testa mia nei parametri, puoi dirmi qualcosa?

oregon
24-05-2014, 15:41
Intanto iniazializzazione sbagliato come nome e non si capisce cosa intendi nei parametri con


(t_Rubrica rubrica & Nome);

che vuol dire & Nome ??

Infine, come ti dicevo, bene che lavori con i puntatori quindi, ad esempio


void Inizializzazione(t_Rubrica *rub)

e cos via

andrea2014
24-05-2014, 15:50
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?

oregon
24-05-2014, 15:59
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);

andrea2014
24-05-2014, 17:15
ho modificato alcune cose come tu mi hai detto:

#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;
}



alcune cose ho risolto, altre invece no .. riscontro comunque problemi nel passaggio di parametri

oregon
24-05-2014, 17:35
Detta cos non so cosa risponderti ... dovresti essere molto pi preciso

Loading