PDA

View Full Version : [C] Passaggio struttura a funzione


salvodel
08-01-2008, 10:35
Salve a tutti non riesco a passare in modo corretto una struttura ad una funzione. Ho visto degli esempi su internet ma non riesco a scriverla in modo corretto. Ho riportato giusto le righe piu significative di quello che ho scritto

#include <stdio.h>
blablablabla

struct mydata{
double matrice[10][5000];
double info[5];
}

int funzione(bla bla, struct mydata struttura)
{
/*Qui non dovrei riuscire a lavorare con struttura.matrice[][] e
con struttura.inf[]???*/
/*Mi da errore. Cosa sbaglio nella sintassi?*/


int main()
{
struct mydata dati;
.............
funzione(bla bla, dati)
}


error C2440: 'function' : cannot convert from 'mydata' to 'double (*)[5000]'

cionci
08-01-2008, 10:46
Secondo me non hai riportato correttamente il problema...perché il codice hai scritto, a parte il ; alla fine della struttura, va alla perfezione.
Puoi riportare il punto esatto in cui ti rileva l'errore ?

salvodel
08-01-2008, 11:01
Secondo me non hai riportato correttamente il problema...perché il codice hai scritto, a parte il ; alla fine della struttura, va alla perfezione.
Puoi riportare il punto esatto in cui ti rileva l'errore ?
:ncomment: Non mi sgridare .....era un errore in una funzione che avevo scritto male :fagiano: e non avevo visto. Per motivi ignoti stavano sulla stessa riga due funzioni uguali ed in una non avevo inserito bene i dati in ingresso.
Grazie e scusa il disturbo

cionci
08-01-2008, 11:09
Succede succede ;)

salvodel
08-01-2008, 11:33
Succede succede ;)
Non funziona :muro: Ora il programma gira ma non fa quello che mi aspettavo. Nella funzione data assume i valori in modo corretto ma nel main i valori di data sono sempre zero. Non dirmi che devo fare un puntatore ad una struttura?

int legge(int punti, struct mydata data)
{
FILE *fdati;
int i=0;
int t=0;


if((fdati=fopen(stringa,"r"))==NULL)
printf("Impossibile aprire il file");
else
{
printf("Dati letti:\n");
while(fscanf(fdati,"%LE %LE %LE %LE %LE %LE %LE",&data.matrice[0][i],&data.matrice[1][i],&data.matrice[2][i],&data.matrice[3][i],&data.matrice[4][i],&data.matrice[5][i],&data.matrice[6][i])>0)
{
printf(".");
i++;
if(i>punti)
{
printf("\n");
break;
}
}
}

fclose(fdati);

return i;
}

Dovrei fare cosi?:

/*Intestazione della funzione*/
legge(int p, struct mydata *punt_struct)
{
/*Qui mi muovo con punt_struct->.matrice[][]?*/
}

int main()
{
struct mydata data;

legge(100,&data)
}

cionci
08-01-2008, 11:42
Togli il . dopo ->...

Devi fare un puntatore a struttura perché cambi i valori all'interno della struttura...il passaggio per copia in questo caso non va bene.

salvodel
08-01-2008, 11:59
Togli il . dopo ->...Perche invece su internet ho trovato cosi? Va be questa è una domanda meno importante...solo per curiositàDevi fare un puntatore a struttura perché cambi i valori all'interno della struttura...il passaggio per copia in questo caso non va bene.
Questo è un programinno fatto per provare....si blocca ed esce una freccia nella linea rossa.

#include <stdlib.h>

struct struttura
{
char nome[10];
int eta;
};

int inserisci(int num, struct struttura *punt)
{
int i;

for(i=0;i<num;i++)
{
printf("Nome: ");
scanf("%s",punt->nome);
printf("Eta: ");
scanf("%d",punt->eta);
}
return 1;
}

int main()
{
int num,i;
struct struttura elenco;

printf("Quanti nominativi vuoi inserire: ");
scanf("%d",&num);
inserisci(num, &elenco);

for(i=0;i<num;i++)
printf("Nome: %s.\tEta: %d\n", elenco.nome, elenco.eta);
system("PAUSE");
return 1;
}

Se volessi passare invece un vettore di struttura devo cambiare qualcosa nell'intestazione della funzione? In questo caso infatti sovrascriverebbe sempre nello stesso punto.
Grazie
EDIT
Sono riuscito a passare anche un array di struttura ma continuo ad avere l'errore nella scanf dell'età. Se la tolgo il programma gira e mi memorizza i nomi correttamente.
#include <stdio.h>
#include <stdlib.h>

struct struttura
{
char nome[10];
int eta;
};

int inserisci(int num, struct struttura *punt)
{
int i;

for(i=0;i<num;i++)
{
printf("Nome: ");
scanf("%s",punt[i].nome);
printf("Eta: ");
scanf("%d",punt[i].eta);
}
return 1;
}

int main()
{
int num,i;
struct struttura elenco[5];

printf("Quanti nominativi vuoi inserire: ");
scanf("%d",&num);
inserisci(num, elenco);

for(i=0;i<num;i++)
printf("Nome: %s.\tEta: %d\n", elenco[i].nome, elenco[i].eta);
system("PAUSE");
return 1;
}

cionci
08-01-2008, 14:20
Manca la & nella scanf ;)

salvodel
08-01-2008, 15:58
Manca la & nella scanf ;)

Ordine e Metodo........sono un P
Grazie mille cionci.