giving error in the places where have comments and I do not know the reason

Asked

Viewed 42 times

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)

  • Company.

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

  • only of segmentation error

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.