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

Strabush

[Duvida] Passagem de parametros para Structs

Mensagens Recomendadas

Strabush

Boas pessoal.

Estou cá com uma duvida algo simples mas não consigo encontrar a solução.

O codigo consiste no seguinte: tenho uma struct que guarda alguns dados que o utilizador introduz, e na main chamo por ela, e não se que parametros usar. Eis o codigo:

struct cliente{
   int numCliente;
   char nomeCliente[50];
   char sexo[2];
   char resid[50];
   char tel[9];
   char mail[50];
};
typedef struct cliente CLIENTE;

struct data{
   int dia, mes, ano;
};
typedef struct data DATA;

void criaCliente(CLIENTE x, DATA y){

   srand( (unsigned int) time(NULL) );    
    x.numCliente = 1000+rand()%(1500-1000+1);
   printf("Nome: ");
   scanf("%s", &x.nomeCliente);
   printf("Data de Nascimento(ex: 02 05 1989): ");
   scanf("%d %d %d", &y.dia, &y.mes, &y.ano);
    printf("Sexo(M ou F): ");
   scanf("%c", &x.sexo);
   printf("Residência: ");
   scanf("%[^\n]", &x.resid);
   printf("Telefone: ");
   scanf("%s", &x.tel);
   printf("Email: ");
   scanf("%s", &x.mail);
}

int main(){

   int op;

   do{
   printf("1 - Criar Cliente");
   printf("0 - Sair");
   scanf("%d", &op);

   switch (op){
   case 1: criaCliente();
          break;
   }
   } while (op != 0);

}

É só repararem pro main no "case 1", a função criaCliente, que paramentros deve receber?

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Tens de declarar 2 variáveis na main, uma do tipo DATA e outra do tipo CLIENTE, e passá-las à função criaCliente.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Strabush

Obrigado Baderous.

Ja tinha tentado isso, mas deu-me erros, eis eles:

warning C4700: uninitialized local variable 'data' used

warning C4700: uninitialized local variable 'cliente' used

error LNK2005: _main already defined in 3ºworkV1.obj

fatal error LNK1169: one or more multiply defined symbols found

E diz também que o scanf não é seguro.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Strabush

Consegui a solução. Venho cá partilhá-la porque pode ajudar alguém penso eu.

1º Método: Temos de criar a função criaCliente da seguinte forma: CLIENTE criaCliente(); ou seja, função do tipo cliente.

2º Método: Usando apontadores. Basta chamar a função criaCliente com os endereços do struct, e a função criaCliente recebe como apontar. Na pratica é assim:

void criaCliente(CLIENTE * p, CLIENTE * pa){

puts("digite o nome");
fgets(pc->nomeCliente);

}

int main(){

criaCliente(&cliente,&data);

}

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.