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

Sign in to follow this  
Strabush

[Duvida] Passagem de parametros para Structs

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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);

}

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×

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.