我正在做一个管理大楼房间数量的C项目,我可以选择预订或预先预订房间。
我的问题是我不知道如何将链表从一个文件传递到另一个文件。
我的main.c看起来像这样(它是一个菜单):
int main()
{
printf("--------------------------------------------------------------------------------n");
time_t t;
time(&t);
printf("Data: %sn", ctime(&t));
printf("--------------------------------------------------------------------------------n");
int opcao;
do{
printf("ntM E N U P R I N C I P A Ln");
printf("nnt1 - Ver Reservas Actuais Por Ordem Cronologica");
printf("nnt2 - Fazer A Sua Reserva");
printf("nnt3 - Estado Da Sua Reserva");
printf("nnt4 - Cancelar A Sua Reserva");
printf("nnt5 - Sair");
printf("nnnttOpcao: ");
scanf("%d", &opcao);
printf("n");
fflush(stdin); /*Limpa o Buffer*/
switch (opcao)
{
case 1 : Listar_Fila(FILA Fila); break;
case 2 : lista_reserva(); break;
/*case 3 : estado_reserva(); break;
case 4 : cancelar_reserva(); break;*/
case 5 : puts("Obrigado por ter preferido o nosso sistema!");break;
default : puts("OPCAO INVALIDA!!");
}
getchar(); /*Para a tela*/
}
while (opcao!=5);
}
我是这样做链表的:
void lista_reserva()
{
FILA F;
char prim_nome_temp[100];
char ult_nome_temp[100];
int hora_inic_temp_h , hora_inic_temp_m;
int hora_fim_temp_h , hora_fim_temp_m;
int sala_temp;
inicia_fila(&F);
puts("Iniciar");
Listar_Fila(F);
printf("Inserir Primeiro Nome: ");
scanf("%s",prim_nome_temp);
printf("Inserir Ultimo Nome: ");
scanf("%s",ult_nome_temp);
printf("Indique que sala pretende reservar: ");
scanf("%d", &sala_temp);
printf("Inserir hora de inicio (HH:MM): ");
scanf("%02d:%02d",&hora_inic_temp_h, &hora_inic_temp_m);
printf("Inserir hora de fim (HH:MM): ");
scanf("%02d:%02d",&hora_fim_temp_h , &hora_fim_temp_m);
insere_fila(&F, sala_temp, hora_inic_temp_h , hora_inic_temp_m , hora_fim_temp_h , hora_fim_temp_m , prim_nome_temp , ult_nome_temp);
Listar_Fila(F);
}
/* Iniciar uma fila */
void inicia_fila(FILA *Fila)
{
*Fila = NULL;
}
/*Inserir na Fila */
void insere_fila(FILA *Fila , int sala , int hora_inic_h , int hora_inic_m , int hora_fim_h , int hora_fim_m , char *prim_nome , char *ult_nome)
{
if (*Fila == NULL)
{
*Fila = (FILA) malloc(sizeof(reservas));
if (*Fila == NULL)
return;
((*Fila)-> sala = sala);
((*Fila)-> hora_inic_h = hora_inic_h);
((*Fila)-> hora_inic_m = hora_inic_m);
((*Fila)-> hora_fim_h = hora_fim_h);
((*Fila)-> hora_fim_m = hora_fim_m);
strcpy((*Fila)-> prim_nome , prim_nome);
strcpy((*Fila)-> ult_nome , ult_nome);
(**Fila).proximo = NULL;
}
else
insere_fila(&(**Fila).proximo , sala , hora_inic_h , hora_inic_m , hora_fim_h , hora_fim_m , prim_nome , ult_nome );
}
我是这样打印的:
void Listar_Fila(FILA Fila)
{
if (Fila == NULL)
return; /*Não existem elementos*/
printf("Sala %d das %d:%d as %d:%d, reservado por %s %snn", Fila -> sala ,Fila ->hora_inic_h , Fila -> hora_inic_m ,Fila -> hora_fim_h , Fila -> hora_fim_m , Fila -> prim_nome , Fila -> ult_nome);
Listar_Fila(Fila -> proximo);
}
我很抱歉,我的项目不是英语的,我知道它有很多初学者的错误,因为我以前从未使用过C,我这样做只是有一个挑战。
请用建设性的批评来帮助我改进。
谢谢
这样做的标准方法是将链表创建为"ADT",一种抽象数据类型。它由一个h文件组成,其中包含main应该调用的所有接口函数,以便使用链表。这些函数在相应的c文件中定义。简化的例子:
// list.h
typedef struct
{
// whatever data you want each node to contain
} node_t;
typedef struct
{
node_t* head;
node_t* tail; // optional
int size; // optional
} list_t
void list_init (list_t* list);
void list_add (list_t* list, const node_t* node);
void list_remove (list* list, node_t* node);
void list_destroy (list_t* list);
然后在list.c
中定义函数