Ir para conteúdo
Fórum Script Brasil
  • 0

Passagem de Estrutura por Referencia


M4CK

Pergunta

Hi !

Bom galera, venho aqui com um programa simples, apenas para estudo, porém me deparei com um probleminha chato.

Vamos ao TAD do programa:

1 - Cadastrar (Apenas entrara em uma função para o cadastro, passando para a função um vetor do meu tipo de dado criado, ou seja, um vetor de "CONTATO", retornando ao programa principal a quantidade de pessoas cadastradas nessa função. já detectei que poderá ocorrer um problema como sobrescrever alguns contatos, mais isso é fácil de resolver quando conseguir passar desse primeiro problema que estou enfrentando.

2 - Consulta (Com base no valor retornado da função CADASTRAR, vou fazer a consulta dos usuários cadastrados, essa é sem muito segredo, mas sem a primeira parte funcionando, não há como prosseguir.

Eu vi que a passagem de uma estrutura por referencia, deveria ser feita como no exemplo:

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

struct ponto
{
 int x,y;
};

void adiciona(struct ponto *p);

main ()
{
 struct ponto q = {0,0};
 adiciona(&q);
 printf("Numeros: X = %d, Y = %d",q.x,q.y);
getch();
}

void adiciona(struct ponto *p){
printf("Digite 2 numeros para usar no plano: \n");
scanf("%d",&p->x);
scanf("%d",&p->y);

}
Porém isso, não estava funcionando quando eu passo um vetor da minha estrutura, queria saber se existe algo além disso para ser passado, pois realmente, essa eu não sei .. HAHA. Enfim, deixo o código, se caso alguém tiver uma idéia para compartilhar, ficarei agradecido. Abraços
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 30

typedef struct CONT
{
char nome[MAX], nick[MAX];
int tel;      
}CONTATO;

int menu();
int CADASTRA(CONTATO *PESSOA);
void CONSULTA(CONTATO *PESSOA, int IND);

main()
{
CONTATO PESSOA[100];
int opc, aux,rmnu;

rmnu=menu();
     switch(rmnu){
                 case 1:
                      {
                         aux=CADASTRA(PESSOA);
                         printf("Voce cadastrou %d usuario(s), parabens !\n\n",aux);
                         _sleep(1000);
                         system("cls");
                         menu();
                         break;
                      }
                      
                 case 2:
                      {
                         CONSULTA(PESSOA,aux);
                         break;        
                      }

            }
     getch();
}


int menu()
{
int opc;
    do{
       printf("******************** AGENDA ********************\n\n");
       printf("(1) -  Cadastro\n(2) - Consulta\n");                                
       printf("Digite a opcao desejada: ");
       scanf("%d",&opc);
       fflush(stdin);
    }while(opc!=1 && opc!=2);
return opc;  
}



int CADASTRA(CONTATO *PESSOA)
{
char OPC;
int IND;

do{
printf("*** Cadastro ***\n\n");    

printf("Digite o nome do contato: ");
fgets(PESSOA[IND].nome,MAX,stdin);

printf("Digite o nick do contato: ");
fgets(PESSOA[IND].nick,MAX,stdin);
                            
printf("Digite o telefone do contato: ");
scanf("%d",&PESSOA[IND].tel);
fflush(stdin);

printf("Deseja cadastrar mais alguma pessoa ? S/N\n");
scanf("%c",&OPC);
fflush(stdin);

IND++;
}while(OPC=='S');
return IND;

}


void CONSULTA(CONTATO *PESSOA, int IND)
{

printf("******************** AGENDA ********************\n\n");    

do{
     printf("---------- Contato %d ----------\n",IND);
     printf("Nome: %s\n",PESSOA[IND].nome);                            
     printf("Apelido: %s\n",PESSOA[IND].nick);
     printf("Telefone: %d",PESSOA[IND].tel);
     printf("\n--------------------------------\n\n");
  IND--;
}while(IND>0);
  
    
}

Obrigado desde já, abraços !

Editado por M4CK
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...