Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
BrunoT

Função retornar nulo

Recommended Posts

BrunoT

Boa Tarde !

Mais um trabalho para a faculdade, mais um problema para resolver :P

Tenho uma função que retorna uma estrutura, e essa função procura num ficheiro por uma determinada estrutura. O que acontece é que se não encontrar a estrutura, não sei o que devo retornar da função. Já pus return NULL ... mas dá erro :s Alguém me pode ajudar ?

Cumprimentos

Share this post


Link to post
Share on other sites
Localhost

Passas para a função uma variável (o endereço).

blah find(int *blahblah) {
  // Se for encontrado
  *blahblah = 1;
  // else
  *blahblah = 0;
}


here since 2009

Share this post


Link to post
Share on other sites
merlin3000

Adicionando mais opções à do local host:

podes retornar um apontador para estrutura (terás que alocar espaço com o malloc) desse modo já deves poder retornar null ou então retornar uma estrutura com um dos valores instanciado com um elemento que assinala que a estrutura não foi encontrada (ex: struct.id = -1).


Criar é Divertido

Share this post


Link to post
Share on other sites
Localhost

Acho que a minha solução é muito mais simples do que andar a alocar memória e a trabalhar com memória dinâmica.


here since 2009

Share this post


Link to post
Share on other sites
BrunoT

A versão do Localhost não percebi muito bem :s

Mas penso que com o "-1" que o merlin3000 falou, já me desenrasco ;)

Obrigado aos dois  :P

Já agora fica o que fiz nesta função:

Ciclista procCiclista (int dors) {

FILE *fCic;
Ciclista a;

int flag = 0;

fCic = fopen ("ciclistas.txt","r+");

fread (&a,sizeof(Ciclista),1,fCic);

while ( !feof(fCic) && flag == 0 ) {

	if ( a.dorsal == dors ) flag = 1;
	else fread (&a,sizeof(Ciclista),1,fCic);

}

fclose (fCic);

if ( flag == 1 ) return a;
else return NULL;

}

Share this post


Link to post
Share on other sites
Localhost

Não sei se já trabalhas com ponteiros mas vou tentar explicar o que eu disse.

Tu passas como argumento à tua função que procura pelo que queres o endereço de uma variável (se passar só a variável não vais poder fazer alterações na mesma) e se encontrares o que pretendes essa variável recebe o valor 1 (ou um valor que queiras) noutro caso recebe o valor 0.

Vou criar aqui a função e a chamada à mesma (de uma maneira muito curta) considerando que a estrutura é do tipo Person:

Person find(int *flag) {
  // Aqui procura, se encontrar faz:
  *flag = 1;
  // Se não encontrar:
  *flag = 0;
}

int main(void) {
  find(&flag);
  if(flag) {
    puts("Encontrado\n");
  }else {
    puts("Bah\n");
  }
}


here since 2009

Share this post


Link to post
Share on other sites
BrunoT

Sim já trabalhei com apontadores.

Não tinha percebido o teu algoritmo, mas agora ficou mais claro  ;) Entretanto se tiver alguma dúvida, passo por cá

Obrigado localhost  :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.