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

Tsoukalos

Arrays dentro de arrays de estruturas :x

Mensagens Recomendadas

Tsoukalos

Boas.

Tenho 2 estruturas (que são arrays), uma para inserir funcionarios e outra para inserir departamentos e resumidamente, e dentro delas tenho outros arrays. Tenho um problema quando tento associar funcionários nos respectivos departamentos.

Exemplo, crio um funcionário e um departamento.

Funcionário

Nome:Manel

ID do Funcionário:12345

Departamento

Nome:Contabilidade

ID do Departamento:666

Quero associar, pelo ID do Funcionário, o funcionário Manel ao departamento de nome Contabilidade.

A minha ideia é procurar o departamento a quem quero associar um funcionário através de um strcmp, quando o encontrar, encontra a posição em que esse departamento está.

Depois, tenho que fazer o input do ID do funcionário para um array que tenho na estrutura Departamentos, já tentei fazendo logo por um gets ou por strcpy, mas dá-me sempre "passing arg 1 of gets' makes pointer from integer without a cast"

#include <stdio.h>
#include <string.h>
#define NOMES 500
#define MAX_FUNC 1000
#define MAX_DEP 300
#define NUM 1000

struct Funcionarios {
       
       char nome_func[NOMES];
       char numero_id[NUM];
        } func[MAX_FUNC];

struct Departamento {
       
       char nome_dep[NOMES];      
       char numero_dep[NUM];
       char id_func_associado[NUM];
     
      } dep[MAX_DEP];

E tenho esta função:

associarFuncDep(){
              
      int i=0;               
      char opcao_id[10];
      char opcao_dep[50];
      
      
      printf("\nDEPARTAMENTOS EXISTENTES");
      for(i=0;i<total_dep;i++){
      printf("\n%s", dep[i].nome_dep);                       
      }
      
      printf("\n\nFUNCIONARIOS EXISTENTES");
      for(i=0;i<total_func;i++){
      printf("\nNome: %s ID: %s", func[i].nome_func, func[i].numero_id);                       
      } 
      
      printf("\n\nDepartamentos a associar:");
      scanf(" ");
      gets(opcao_dep);
      
      for(i=0;i<total_dep;i++){
          //aqui vai procurar o departamento             
        if(strcmp(dep[i].nome_dep, opcao_dep) == 0)
        break;
        //depois de encontrar, o i vai ser a posição do departamento a que queremos associar
        }  
       
      printf("\nEscolher ID a associar:");
      scanf(" ");
      //num_pos é uma variavel global que vai ocupar as posições do array que já estão ocupadas
     //por exemplo se ja houverem 2 posições ocupadas no array id_func_associados, ele só vai          começar a escrever na seguinte
      [b]gets(dep[i].id_func_associado[num_pos+1]);[/b]
     //e é neste gets que me está a dar problemas, estou a fazer asneira com certeza
      num_pos++;

   

Se for uma coisa muito simples peço desde já desculpas, com os erros é que se vai aprendendo.

Nota:obviamente este problema faz parte de algo muito maior, mas estou "encravado" nesta parte há 3 dias

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

gets ....

mais uma deixa para teres toda a gente aqui do forum a dizer para não usares essa função.

tenta usar o fgets.

se depois disso continuares a teres erros avisa

ps:

char id_func_associado[NUM];

não deveria ser ?

char id_func_associado[NUM][MAX_FUNC];


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tsoukalos

char id_func_associado[NUM][MAX_FUNC];

:wallbash:

Assim pelo menos já não me dá o warning nos gets (que pelos vistos tenho de deixa-los ehehe), agora vou ver se quando for a listar os funcionarios dos departamentos, se ele associa mesmo.

Muito obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tsoukalos

Não consigo listar os valores que foram (supostamente com sucesso) lá para dentro.

//o i foi achado num strcmp
for (j=0;j<num_pos;j++){
      printf("\n %s", dep[i].id_func_associado[j]);
      }

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ninguem aqui vai adivinhar o erro de te aparece ...

tens de explicar melhor :

- se dá erro = qual ?

- se não dá erro, mas dá valores diferentes do esperado = quais os esperados e quais os que aparecem


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tsoukalos

Não aparece nada quando listo, como se não tivesse lá valor nenhum.

Com aquele for era suposto teoricamente ficar no valor i que foi a posição que achei do grupo que queria, e depois o for com o j ia percorrer os valores supostamente armazenados.

Até testei a meter um print f antes deste for para ver se o i ia com a valor certo

A compilar não dá erro nenhum.

 listarFuncDep(){
                  
      int i=0, j=0;         
      char opcao_dep[50];
                           
      printf("\nNP:%i", num_pos);
      printf("\nDEPARTAMENTOS EXISTENTES");
      for(i=0;i<total_dep;i++){
      printf("\n%s", dep[i].nome_dep);                       
      } 
      
      printf("\n\nDepartamento a pesquisar:");
      scanf(" ");
      gets(opcao_dep);
      
      printf("ID das pessoas no departamento: ");
      for(i=0;i<total_dep;i++){
      
     if((strcmp(dep[i].nome_dep, opcao_dep)) == 0)
     break;
     }
     
      for (j=0;j<num_pos;j++){
      printf("\n %s", dep[i].id_func_associado[j]);
      }                           
      
      
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Usa o geshi pls


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

tens a certesa que o departamento foi encontrado ?

     if((strcmp(dep[i].nome_dep, opcao_dep)) == 0)
       break;
     }

este código pode parar o ciclo se for encontrado mas e se não for? o que acontece ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tsoukalos

tens a certesa que o departamento foi encontrado ?

     if((strcmp(dep[i].nome_dep, opcao_dep)) == 0)
       break;
     }

este código pode parar o ciclo se for encontrado mas e se não for? o que acontece ?

já exprimentei a meter um printf para me mostrar o i depois de sair do for onde está esse if com o break e ele mostra-me de facto o i correcto, o i onde está de facto o departamento que quero encontrar.

para já estou a assumir que é encontrado e o utilizador é inteligente, quando conseguir resolver este problema principal completo então com os pormenores.

Para já pensei esta maneira, mas se houver alguém que tenha uma sugestão de como inserir valores naquele array da posição que quero naquela estrutura...

Possivelmente com ponteiros seria mais fácil, mas para já não sei utilizá-los.

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.