在学校项目中需要帮助

Need help in a school project

此代码适用于学校项目和公司。 我们需要用一些信息创建一个员工。如果我只是把 printf 它工作,但是当我使用 scanf 代码崩溃。 我不知道为什么它不起作用。 如果您需要更多信息,请告诉我

main.c


int main() {
    
    FILE *file;
    Funcionario *lista_funcionarios;
    int tam_lista = 0, escolha = 0;
menu_funcionario(lista_funcionarios, tam_lista, file);
}

funcionario.c

void criar_funcionario(Funcionario *funcionario, Funcionario *lista_funcionarios, int tam_lista, FILE *file) {

    
    printf("Code:");
    scanf("%d", &funcionario->codigo);
}
void menu_funcionario(Funcionario *lista_funcionarios,int tam_lista, FILE *file) {
    
    int op;
    Funcionario *funcionario_temp;
    int codigo_temp;
    criar_funcionario(funcionario_temp, lista_funcionarios, tam_lista, file);
}



funcionario.h 我认为 heres everething 很好,但是你可以看到 funcionar 和 codigo 的类型


#define MAX_FUNCIONARIOS  2000
#define TAM_NOME  200   
#define MIN_NUM_FUNCIONARIO  0
#define MAX_NUM_FUNCIONARIO  10000
#define MIN_DIA  0
#define MAX_DIA  31
#define MIN_MES  1
#define MAX_MES  12
#define MIN_ANO  1900
#define MAX_ANO  2021
#define MIN_TELEMOVEL  0 
#define MAX_TELEMOVEL  999999999
#define SUB_ALIMENTACAO 4.30
#define MIN_FILHOS  0
#define MAX_FILHOS  100  
#define VENC_BASE_EMP_LIMP 2.65
#define VENC_BASE_COST 2.90
#define VENC_BASE_SOC_GER 3.13
#define VENC_BASE_ENC_LINHA 3.44
#define VENC_BASE_EMP_ESC 4.16
#define VENC_BASE_MOD  6.25
#define MIN_PREFIXO 0
#define MAX_PREFIXO 9999
#define MAX_ESTADO_CIVIL 5
#define MIN_ESTADO_CIVIL 0

    typedef enum {
        casado, solteiro, divorciado, viuvo, separado
    } Estado_civil;

    typedef enum {
        empregada_limpeza,
        costureira,
        modelista,
        empregada_escritorio,
        encarregada_linha,
        socio_gerente
    } Cargo;

    typedef struct {
        int tm_sec; //representa os segundos de 0 a 59
        int tm_min; //representa os minutos de 0 a 59
        int tm_hour; //representa as horas de 0 a 24
        int tm_mday; //dia do mês de 1 a 31
        int tm_mon; //representa os meses do ano de 0 a 11
        int tm_year; //representa o ano a partir de 1900
        int tm_wday; //dia da semana de 0 (domingo) até 6 (sábado)
        int tm_yday; // dia do ano de 1 a 365
        int tm_isdst; //indica horário de verão se for diferente de zero
    } tm;

    typedef struct {
        int dia, mes, ano;
    } Data;

    typedef enum {
        false, true
    } Bool;

    typedef struct {
        Bool eliminado;
        int codigo, numero_telemovel, numero_filhos, indicativo_numero_telemovel, saida;
        char nome [TAM_NOME];
        Cargo cargo;
        Estado_civil estado_civil;
        Data data_entrada, data_saida, data_nascimento, tempo_empresa, data_entrada_temp, data_saida_temp;
        double subsidio_alimentacao, vencimento_base, ent_empregadora_seg_social;
        tm data_atual, data_atual_temp;

    } Funcionario;

    void criar_funcionario(Funcionario *funcionario, Funcionario *lista_funcionarios, int tam_lista, FILE *file);
    void editar_funcionario(Funcionario * funcionario);
    void remover_funcionario(Funcionario * funcionario);
    void mostrar_funcionario(Funcionario *funcionario);
    Bool esta_removido(Funcionario *funcionario);
    void criar_Data(Data* data, int dia, int mes, int ano);
    void calcular_tempo_empresa_saiu(Funcionario *funcionario);
    void time_now();
    void calcurar_tempo_empresa(Funcionario *funcionario);
    Funcionario procurar_funcionario(int codigo, Funcionario *lista_funcionarios, int tam_lista, FILE *file);
    void menu_funcionario(Funcionario *lista_funcionarios, int tam_lista, FILE *file);


#ifdef __cplusplus
}
#endif

#endif /* FUNCIONARIO_H */

menu_funcionario 中,您将未初始化的指针 funcionario_temp 传递给 criar_funcionario,并在其中取消引用它。如果 funcionario_temp 不指向现有的 Funcionario 对象,那将无法工作。您需要创建 Funcionario 的实例并将其地址传递给 criar_funcionario.

void menu_funcionario(Funcionario *lista_funcionarios,int tam_lista, FILE *file) {
    Funcionario funcionario_temp;
    criar_funcionario(&funcionario_temp, lista_funcionarios, tam_lista, file);
}