【发布时间】:2016-12-04 13:42:22
【问题描述】:
我正在为我的编程主题做一个练习,这是一个医院管理程序。在程序开始时,我需要将信息从 .txt 发送到动态结构。过去几个小时我一直在与我为什么会丢失数据而斗争。
为什么退出此函数后我的头指针为空,我尝试将其打印出来?指针不应该保留信息。
提前致谢。 Ps:如果您对我的算法有任何提示,请随时说。
void dump_med(struct medico *head_m)
{
int i = 1;
struct medico *new_med;
struct medico *temp_m;
FILE *f = fopen(M_FILE, "r");
new_med = malloc(sizeof(struct medico));
temp_m = malloc(sizeof(struct medico));
if(f == NULL)
{
printf("Erro a abrir o ficheiro\n");
return;
}
if( new_med == NULL || temp_m == NULL)
{
printf("Erro a alocar a memória\n");
return;
}
while(!feof(f))
{
new_med = realloc(new_med, sizeof(struct medico) * i);
if( new_med == NULL)
{
printf("Erro a realocar a memória\n");
return;
}
fscanf(f, "%[^\n]", new_med->nome);
fscanf(f, "%s %d.%d--%d.%d\n", new_med->especialidade, &(new_med->entrada.h),
&(new_med->entrada.m), &(new_med->saida.h), &(new_med->saida.m));
temp_m = new_med;
temp_m->next = head_m;
head_m = temp_m;
new_med = new_med->next;
i++;
}
free(new_med);
free(temp_m);
fclose(f);
}
【问题讨论】:
-
我质疑您在这里尝试构建前向链表的机制。有很多,很多更简单的方法可以做到这一点。
-
如果你能指导我采用一种更简单的方法,那是我第 5 次尝试链表,其他时候我总是失去头部位置,我将不胜感激。
-
Something like this,使用提供的文件名和将接收正在生成的列表的节点指针的地址调用。祝你好运。任何未来的“这怎么能更好”的问题都应该被强加给codereview.stackexchange.com。
-
哇,它真的更简单更清晰!我将尝试将其调整为我的代码并检查 codereview。谢谢!!!
标签: c pointers pass-by-value function-calls