Jump to content

[C] Ajuda: Pesquisa em estruturas


Recommended Posts

Posted

Ola a todos estou a tentar fazer uma função que faz uma pesquisa numa estrutura em que a informação é guardada num vector, já ando as volta com isto e não consigo.

tenho esta estretura:

/* ---------------------------  Inicio  Estretura motas ---------------------------------------------*/

typedef struct { /* O typedef server para não estar a repetir a palavra stuct no código */	
	int agrupamento;				 /*Tipo de agrupamento: motos, carros, camiões*/
	int numero;						 /*Numero de indentificação */
	int tempo;                       /*Tempo ( temp acumualdao das etapas hh-mm-ss );*/
	int hh;						     /* Tempo horas */
	int mm;							 /* Tempo minutos */
	int ss;                          /* Tempo segundos */
	int classificacao;               /* Número de classificativas concluidas */ 
	char equipa [limequipa];         /*Equipa*/
	char marca [limmarca];			 /*Marca*/
	char modelo [limmodelo];		 /*Modelo*/
	char piloto [limpiloto];         /*Nome Piloto */
}motas;
/* ---------------------------  Fim  Estretura motas    ---------------------------------------------*/

os dados são guardados neste vector:

motas dakar1[250];  /* vector 250 ( motos)  */

alguém pode ajudar.

Isto é um trabalho sobe o Dakar que tenho de entregar, parece uma estupidez já ando a mais de três dias as voltas com isto e não sou capaz de fazer isto.

Posted

Pois esqueci me :wallbash:.

Digamos que inseri uma equipa com o n.º de identificação : "4"  ( [motas.numero] )  .

E quero fazer uma pesquisa em que encontre o n.º de identificação " 4" , e que diga o nome da equipa; piloto; marca ; ou seja os dados da estrutura que pertencem ao n.º de identificação 4.

Posted

Pelo que percebi queres uma função deste tipo.

int pesquisa(int n_id)
{
    int i;
    
    for(i=0;i<250;i++)
        if(dakar[i].numero==n_id)
        {
            printf(".........Os dados que queres");
            return 1;
        }
        
    return 0;
}

Podia igualmente ser feito com um while, mas a lógica é a mesma, percorrer dakar1 até ao fim. Se encontrarmos um numero de identificação compativel imprimes os seus dados. Retornei 0 só para ter algo que me diga no código se encontrou ou não, se não quiseres podes simplesmente dizer que quando encontrar o número i=250 isso terminaria o for;

se o vector dakar não for global. Tens que enviá-lo também para a função.

Criar é Divertido

Posted

Pa faz algo do tipo....

//n é o numero que tás a procura.
int i = 0;
while(dakar1[i]->numero != n && i < 250){
i++;
}
printf("%d\n",dakar1[i]->agrupamento);
printf("%d\n",dakar1[i]->tempo);
printf("%d\n",dakar1[i]->classificacao);
//..... e por ai fora

I haven’t lost my mind; it’s backed up on DVD somewhere!

Posted

Pelo que percebi queres uma função deste tipo.

int pesquisa(int n_id)
{
    int i;
    
    for(i=0;i<250;i++)
        if(dakar[i].numero==n_id)
        {
            printf(".........Os dados que queres");
            return 1;
        }
    return 0;
}

se o vector dakar não for global. Tens que enviá-lo também para a função.

Essa tá mais formal 👍 e talvez mais simples..

I haven’t lost my mind; it’s backed up on DVD somewhere!

Posted

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Posted

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

Não sabia. que tinham a mesma funcionalidade a mim explicaram que eram diferentes.

Posted

A"->" e o "." tem a mesma funcionalidade como programo muito em Java normalmente uso o "." mas não sei porque em C uso sempre a "->" tal como em php.

Não sabia. que tinham a mesma funcionalidade a mim explicaram que eram diferentes.

E são diferentes. Quando usas apontadores usas o -> quando usar arrays usas o .

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

Ambos dependem do uso que lhe quiseres dar é apenas um auxílio visual. Por exemplo:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
   int v1;
   int v2;
} estrutura;

int main()
{
estrutura a, *b;
   b=&a;
a.v1=1;
a.v2=2;

printf("%d - %d",a.v1, b->v2);

return 0;
}

o -> serve para que em vez de *b.v2 escrevas b->v2. Ou seja é a tradução visual para código da expressão "o elemento apontado por", se tentares usar nese caso em vez de a.v1, a->v1 vai dar erro porque a não é um apontador.

Criar é Divertido

Posted

Precisamente por isso é que uso a "->" é muito mais simples, para alem disso quando consultamos uma struct estamos a apontar para argumentos da mesma.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Posted

Lol usando apontadores nem se discute. o "->" torna tudo muito mais legível, pelo menos na minha opinião.

Para ser sincero até nunca as tinha usado em C só em C++ mas quando fizes-te o teu exemplo fui testar a ver se se realmente dava. Pensava que era mais uma coisa exclusiva do c++  ?

Criar é Divertido

Posted

Eu não domino muito C sou mais Java 👍 mas como tive 3 trabalho para fazer em C tive que aprender há força sozinho e fiz sempre com as "->" e foi sempre o que usei por isso é que não uso os "." no C 😉

I haven’t lost my mind; it’s backed up on DVD somewhere!

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
×
×
  • Create New...

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.