0
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct pessoa{
char nome[100];
};
typedef struct pessoa Pessoa;
struct funcionario{
Pessoa f;
char cargo[120];
float sal;
};
typedef struct funcionario Funcionario;
struct depto{
char nome[100];
Funcionario *func;
};
typedef struct depto Depto;
typedef struct{
char nome[200];
Depto *dpt;
}empresa;
int dept = 0;
int glob;
int menu();
Depto *Dep(empresa Empresa, int *vai);
Depto *funci(empresa Empresa, int *kk);
void relat(empresa Empresa, int *kk);
int k = 0;
int main(){
int *kk;
empresa Empresa;
printf("nome da empresa\n");
setbuf(stdin,NULL);
scanf("%s", Empresa.nome);
int op;
do{
op = menu();
if(op == 1){
Empresa.dpt=Dep(Empresa, kk);
}else if(op == 2){
Empresa.dpt=funci(Empresa, kk);
}else if(op==5){
relat(Empresa, kk);
}
}while(op != 0);
}
int menu(){
int op;
printf("Cadastro de empresa \n");
printf("1 - Cad. Departamento \n");// o cadastro deve ser feito apenas do depto
printf("2 - Cad. Funcionarios \n");//cadastrar apenas (o)s funcionario(s) ou
printf("3 - Busca e mostra funcionario\n");
printf("4 - Busca e mostra dept \n");//mostrar todos os funcionarios do depto
printf("5 - Relatorio da Empresa \n");//mostrar todas as informcacoes cadastradas na estruct Empresa
printf("0 - Sair \n");
scanf("%d",&op);
return op;
}
Depto *Dep(empresa Empresa, int *kk){
int qtd;
int qtd2;
printf("quantidade de departamentos que deseja cadastrar?\n");
scanf("%d", &qtd);
if(dept == 0){
Empresa.dpt = (Depto*)malloc(sizeof(Depto) * qtd);
kk = (int*)malloc(sizeof(int)*qtd);
for(int i = 0; i < qtd; i++){
printf("\n digite o nome departamento %d\n", i+1);
scanf("%s", Empresa.dpt[i].nome);
}
dept = qtd;
return Empresa.dpt;
}else{
qtd2 = dept;
dept=dept+qtd;
Empresa.dpt = (Depto*)realloc(Empresa.dpt,sizeof(Depto) * dept);//dando erro aqui
kk = (int*)realloc(kk,sizeof(int)*dept);
for(int i = qtd2; i < dept; i++){
printf("\n digite o nome departamento %d\n", i+1);
scanf("%s", Empresa.dpt[i].nome);
}
return Empresa.dpt;
}
}
Depto *funci(empresa Empresa, int *kk){
int qtd;
int numero;
int numero2;
int nada;
int cont;
glob=0;
printf("cadastrar novos[1], mudar cadastrao de 1 funcionario[2]\n");
scanf("%d", &k);
if(k==1){
for(int i = glob; i < dept; i++){
printf("quantas funcionarios quer no departamento %d \n", i+1);
scanf("%d", &qtd);
kk[i]=qtd;
Empresa.dpt[i].func = (Funcionario*)malloc(sizeof(Funcionario)*qtd); //erro aqui tambem
for(int j = 0; j < qtd; j++){
printf("digite o nome do funcionario %d\n", j+1);
scanf("%s", Empresa.dpt[i].func[j].f.nome);
printf("digite o cargo\n");
scanf("%s", Empresa.dpt[i].func[j].cargo);
printf("digite o salario\n");
scanf("%f", &Empresa.dpt[i].func[j].sal);
}
glob++;
return Empresa.dpt;
}
}else{
printf("digite o numero do dept\n");
scanf("%d", &numero);
printf("quantos funcionarios quer adicionar?\n");
scanf("%d", &numero2);
Empresa.dpt[numero-1].func = (Funcionario*)realloc(Empresa.dpt[numero-1].func, sizeof(Funcionario) * (numero2+kk[numero-1]));
for(int m = kk[numero-1]; m < numero2;m++){
printf("digite o nome do funcionario %d\n", m+1);
scanf("%s", Empresa.dpt[numero-1].func[m].f.nome);
printf("digite o cargo\n");
scanf("%s", Empresa.dpt[numero-1].func[m].cargo);
printf("digite o salario\n");
scanf("%f", &Empresa.dpt[numero-1].func[m].sal);
}
return Empresa.dpt;
}
}
void relat(empresa Empresa, int *kk){
printf("Empresa %s\n", Empresa.nome);
for(int i = 0; i < dept; i++){
printf("departamento %d\n", i+1);
for(int j = 0; j < kk[i]; j++){
printf("funcionario %s\n", Empresa.dpt[i].func[j].f.nome);
printf("salario: %f\n", Empresa.dpt[i].func[j].sal);
printf("cargo %s\n", Empresa.dpt[i].func[j].cargo);
}
}
}
I believe the problem is because you are not passing the type of the variable, this: Company.In,sizeof(Department), it should be like this: Company.In,sizeof(int)
– Edjane
Company.
– Prog
What is the mistake? Or, what are they, if they are different... Also, it is always good to test when using memory allocation - go that you are lacking memory...
– Leonardo Alves Machado
only of segmentation error
– Prog