c - 在学校项目中需要帮助
问题描述
此代码适用于学校项目,适用于公司。我们需要创建一个包含一些信息的员工。如果我只是把 printf 它工作,但当我使用 scanf 代码崩溃。我不知道为什么它不起作用。如果您需要更多信息,请告诉我
主程序
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 我认为一切都很好,但你可以看到 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);
}
推荐阅读
- jq - 如何在`jq`中转义字符串?
- postgresql - Docker Compose postgres 9.6 初始化数据库
- vue-apollo - Vue Apollo 项目 - 拥有单独的服务是共享状态的好方法吗?
- mysql - 如何修复 SQL 错误 (1248):每个派生表都必须有自己的别名
- python - 当满足 2 个标准时,如何仅总结基于值的值?
- excel - 粘贴另一个工作表中的前导公共子字符串
- javascript - 如何在前端 Web 应用程序中隐藏测验的答案?
- ruby-on-rails - ActiveRecord 在双向线程中选择第一条消息
- excel - 使用 AGGREGATE 函数提取数组中的最大值会引发错误
- python - 显示 subprocess.Popen 的输出,就像在终端中运行一样