Arrays dentro de arrays de estruturas :x - C - Portugal-a-Programar
Arrays dentro de arrays de estruturas :x
Por Tsoukalos, 19 de Janeiro de 2012 em C
Tsoukalos 0
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.
Nome:Manel
ID do Funcionário:12345
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"
#define NOMES 500
#define MAX_FUNC 1000
#define MAX_DEP 300
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(){
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:");
gets(opcao_dep);
//aqui vai procurar o departamento
if(strcmp(dep[i].nome_dep, opcao_dep) == 0)
//depois de encontrar, o i vai ser a posição do departamento a que queremos associar
printf("\nEscolher ID a associar:");
//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
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
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
não deveria ser ?
char id_func_associado[NUM][MAX_FUNC];
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.
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]);
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
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(){
printf("\nNP:%i", num_pos);
printf("\n\nDepartamento a pesquisar:");
printf("ID das pessoas no departamento: ");
if((strcmp(dep[i].nome_dep, opcao_dep)) == 0)
Usa o geshi pls
tens a certesa que o departamento foi encontrado ?
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...