C语言 如何传递链表从一个文件到另一个在同一项目



我正在做一个管理大楼房间数量的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中定义函数

相关内容

  • 没有找到相关文章

最新更新