Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

JoaoNascimento

Estruturas -> Passagem de parametros para função

Mensagens Recomendadas

JoaoNascimento

Tenho a seguinte estrutura:

typedef struct dados
{
char curso[N][50], nomeuc[N][50], doc_res[N][50], area_cientifica[N][50];
float t[N], tp[N], pl[N], p[N], ac[N], ot[N], s[N], turm_t[N],turm_tp[N], turm_p[N], turm_pl[N], turm_ac[N], turm_ot[N], turm_s[N], docentes[N];
int ects[N], opcional[N], ano[N], i, semestre[N];
} DADOS;

Que quero preencher numa função que vai ler ao ficheiro:

void ler_dados_fich(DADOS dados)
{
char cabecalho[1000];
int i=0;
FILE *pfdados;

pfdados=fopen("dados_ucs_070410.txt","r");

if(pfdados==NULL)
{
	printf("Erro ao abrir o ficheiro! \n");
	system("pause");
}

fscanf(pfdados,"[^\n]\n",cabecalho);
//printf("%s\n",cabecalho);
for (i=0;i<92;i++) 
{
	fscanf( pfdados , "%[^\t]\t%d\t%d\t%[^\t]\t%d\t%[^\t]\t%d\t%[^\t]\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t\t\n",dados.curso[i],&dados.ano[i],&dados.semestre[i],dados.nomeuc[i],&dados.ects[i],dados.area_cientifica[i],&dados.opcional[i],dados.doc_res[i],&dados.docentes[i],&dados.turm_t[i],&dados.turm_tp[i],&dados.turm_p[i],&dados.turm_pl[i],&dados.turm_ac[i],&dados.turm_ot[i],&dados.turm_s[i],&dados.t[i],&dados.tp[i],&dados.p[i],&dados.pl[i],&dados.ac[i],&dados.ot[i],&dados.s[i]);
}
}

Como é que declara essa função no MAIN()?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Se a struct está definida numa outra função sem ser essa para modificares a instância que declaraste dessa struct tens de passar por referência essa mesma instância e depois tens de utilizar o operador -> para trabalhares nos campos da instância passada.

Um pequeno exemplo:

typedef struct {
  int key;
}data;

int main(void) {
  data newData; // Declaração da instância
  blah(&newData); // Passar endereço para a função
  return 0;
}

void blah(data *newData) {
  newData->key = 10; // Modificação do campo key com o operador ->
}


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Sabes o que é passagem por referência? Se não souberes aconselho-te a leres sobre ponteiros senão torna-se dificil perceberes o exemplo. Se sabes o que é vou tentar explicar.

Faço uma declaração normal de uma estrutura que defini como sendo de um tipo que eu chamei "data" depois na função main declarei uma instância desse mesmo tipo "data". Passei para a função blah o endereço dessa instância para que possa modificar nessa função blah o conteúdo da instância (aqui entra a passagem por referência).

Na função blah declarei um ponteiro que é o que vai receber o endereço da instância que passei para a função blah da função main. Depois utilizo o operador -> para modificar o campo key da instância que me foi passada. De notar que para modificar instâncias apontadas por um ponteiro (como é o caso), ou melhor, para se desreferenciar ponteiros que apontam para estruturas tem de se utilizar este operador.

Para perceberes melhor a utilização deste ponteiro vê o seguinte código e considera que já está definida a estrutura (considera a do código anterior):

data newData;
data *pt = &newData;
pt->key = 666;


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.