Jump to content

Arrays dentro de arrays de estruturas :x


Recommended Posts

Posted

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

Posted
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!

Posted

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]);
      }
Posted

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]);
      }                           
      
      
}
Posted

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%.

Posted

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.

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
×
×
  • Create New...

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.