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

BrunoT

Função retornar nulo

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

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.