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

suzy

como comparar a posicao que recebo como argumento com a funcao??

5 mensagens neste tópico

malta tenho o seguinte problema  ;)

Desenvolva uma função que escreva no monitor a informação relativa a um criminoso. A

função recebe, como argumentos, um ponteiro para o início da tabela, o número de

elementos que esta contém e a posição em que se encontra a estrutura com a informação

do criminoso pretendido;

#include<stdio.h>
# define DIM 100

struct criminoso{
          char nome[100];
	  int altura;
	  int peso;
	  };
	  
	  
void escreve(struct criminoso *p,int dim,int posicao)
     {
     
 int i;

 for(i=0;i<dim;i++)
     {
	  if(*(p+i)==posicao).........................................// AQUI NAO SEI COMO FAZER , nao me ta a dar correcto
	     {
		 printf(" o nome e %s\n", p->nome);
		 }

	}

}

main()
{
struct rectangulo t[DIM];
int posicao;
printf(" qual a posicao\n");
scanf("%d",&posicao);
escreve(t,DIM,posicao);

fflush(stdin);
getchar();
}

sei que ter *(p+i), e o mesmo que ter v e o meu raciocionio era sabendo a posicaço tipo se v[0]==posicao ia buscar o valor tipo (*p).nome

como faço ajuda:(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas a posição é-te dada, não tens que comparar com nada.

Pensa assim: tens um array de inteiros p. Para imprimires o inteiro que está no índice 5 fazes

printf("%d", p[5]);

Para imprimires o inteiro que está no índice i, fazes

printf("%d", p[i]);

Para um array de structs o raciocínio é o mesmo, mas em vez de teres um inteiro tens um criminoso (salvo seja ;) ) e podes aceder directamente aos elementos da struct:

printf("%s", p[posicao].nome);

ou

printf("%s", *(p+posicao).nome);

EDIT: não te esqueças de verificar se posicao é menor que dim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ASSIM?





#include<stdio.h>
# define DIM 100

struct criminoso{
          char nome[100];
	  int altura;
	  int peso;
	  };
	  
	  
void escreve(struct criminoso *p,int dim,int i)
     {

 printf(" o nome e %s\n", (p+i)->nome);
 printf("a altura e %d\n",(p+i)->altura);
 printf(" o peso e %d\n", (p+i)->peso);
 }
     

main()
{
struct criminoso t[DIM];
int posicao;
printf(" qual a posicao);
scanf("%d",&posicao);
escreve(t,DIM,posicao);

fflush(stdin);
getchar();
}








0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso.

Não te esqueças é de preencher o array antes de tentares ler :D e já agora fecha a string do printf. E de

EDIT: não te esqueças de verificar se posicao é menor que dim

:D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim... em vez de fazeres  " (p+i)->nome " podes simplesmente escrever " p[ i ].nome " , é a mesma coisa.

if(*(p+i)==posicao)

isto estaria correcto se o argumento da função fosse um apontador com o endereço de memoria do criminoso pretendido.

lembrate que  p  é um apontador que contem uma posição de memoria, ao somar i  temos um novo endereço de memória e ao desreferenciar  -  *( p+i ) -  obtens a estrutura "criminoso" que se encontra nessa posição de memoria. Tu estavas a comparar a estrutura com um inteiro ( 5 por exemplo) por isso não dava.

0

Partilhar esta mensagem


Link 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