2016-01-30 30 views
-5

我想在C程序中實現2件事情。我不認爲有必要向您展示代碼,因爲我只是想知道如果他們有可能完成。我已經查過這個,但找不到明確的答案。需要一些幫助搞清楚如何在我的C程序中做2件事

我有這個程序在C中,有許多功能,main()和3個「子菜單」。 主要是基本上只是程序的主菜單,它包含哪種情況下去其他子菜單,並且每個子菜單去相關的功能。 我想知道的是如何使這些函數返回到這些子菜單,而不是返回到main()。 在這些函數中,我有一個「返回」;在最後,但他們返回到主,而不是子菜單。如果能夠澄清一點,這將是非常好的。

我的另一個問題是,如果有可能返回到子菜單,在從該子菜單輸入數據的功能之前,按下退格鍵,或者按下該鍵時,取消功能(好像我誤點了這個功能並想返回)並返回到子菜單。

我真的很感激一些幫助,如果需要,我可以張貼代碼,或它的一部分,因爲它仍然是相當大的,給予一定的上下文(但要注意裸露的,所有的變量,函數名, printf和什麼都不是葡萄牙語)。編號: 這是代碼。

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <ctype.h> 
#define NR 1000 

//////////////////////////////////////////////////////////////////////////////// 

typedef struct 
{ 
    int idJogo; 
    char nomeJogo[50]; 
    char genero[50]; 
    char empresa[50]; 
    char plataforma[50]; 
    long int preco; 
    int estado; // 1 - Ocupado e 0 - Livre 
}jogo; 

typedef struct 
{ 
    int idCliente; 
    char nomeCliente[50]; 
    long int contacto; 
    char cidade[50]; 
    int estado; // 1 - Ocupado e 0 - Livre 
}cliente; 

typedef struct 
{ 
    int idCompra; 
    int idCliente; 
    int idJogo; 
    char nomeJogo[50]; 
    char nomeCliente[50]; 
    char dataCompra[20]; 
    long int valor; 
    int estado; // 1 - Ocupado e 0 - Livre 
}compra; 

//////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////// FICHEIROS ////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 

///////////////////////////// Ler Ficheiros //////////////////////////////////// 

int lerficheiros (jogo *jogo, cliente *cliente, compra *compra) 
{ 
    int m, n, o; 
    printf("\n\tA carregar os ficheiros...\n\n"); 
    FILE *fj, *fc, *fk; 

    // Verifica se existe o ficheiro txt dos jogos 
    if(!(fj=fopen("jogos.txt", "r"))) 
    { 
    printf("\n\n\tO ficheiro de jogos não existe. <Enter> para criar o ficheiro.");getch(); 
    // Cria o ficheiro caso não exista 
    fj=fopen("jogos.txt", "w"); 
    printf("\n\tO ficheiro dos jogos foi criado."); 
    } 
    // Lê o ficheiro dos jogos 
    fj=fopen("jogos.txt", "r"); 
    for (m=1; m<NR; m++) 
    { 
    fscanf(fj, "%d\n", &jogo[m].idJogo); 
    fscanf(fj, "%s\n", jogo[m].nomeJogo); 
    fscanf(fj, "%s\n", jogo[m].genero); 
    fscanf(fj, "%s\n", jogo[m].empresa); 
    fscanf(fj, "%s\n", jogo[m].plataforma); 
    fscanf(fj, "%ld\n", &jogo[m].preco); 
    fscanf(fj, "%d\n", &jogo[m].estado); 
    } 
    fclose(fj); 
    printf("\n\tFicheiro dos jogos lido <Enter> para continuar.\n");getch(); 

    //Igual para o ficheiro dos clientes 
    if(!(fc=fopen("clientes.txt", "r"))) 
    { 
    printf("\n\n\tO ficheiro de clientes não existe. <Enter> para criar o ficheiro.");getch(); 
    // Cria o ficheiro caso não exista 
    fc=fopen("clientes.txt", "w"); 
    printf("\n\tO ficheiro dos clientes foi criado."); 
    } 
    // Lê o ficheiro dos clientes 
    fc=fopen("clientes.txt", "r"); 
    for (n=1; n<NR; n++) 
    { 
    fscanf(fc, "%d\n", &cliente[n].idCliente); 
    fscanf(fc, "%s\n", cliente[n].nomeCliente); 
    fscanf(fc, "%ld\n", &cliente[n].contacto); 
    fscanf(fc, "%s\n", cliente[n].cidade); 
    fscanf(fc, "%d\n", &cliente[n].estado); 
    } 
    fclose(fc); 
    printf("\n\tFicheiro dos clientes lido <Enter> para continuar.\n");getch(); 

    //Mais uma vez igual para o ficheiro das compras 
    if(!(fk=fopen("compras.txt", "r"))) 
    { 
    printf("\n\n\tO ficheiro de compras não existe. <Enter> para criar o ficheiro.");getch(); 
    // Cria o ficheiro caso não exista 
    fk=fopen("compras.txt", "w"); 
    printf("\n\tO ficheiro de compras foi criado."); 
    } 
    // Lê o ficheiro das compras 
    fk=fopen("compras.txt", "r"); 
    for (o=1; o<NR; o++) 
    { 
    fscanf(fk, "%d\n", &compra[o].idCompra); 
    fscanf(fk, "%d\n", &compra[o].idCliente); 
    fscanf(fk, "%d\n", &compra[o].idJogo); 
    fscanf(fk, "%s\n", compra[o].nomeJogo); 
    fscanf(fk, "%s\n", compra[o].nomeCliente); 
    fscanf(fk, "%s\n", compra[o].dataCompra); 
    fscanf(fk, "%ld\n", &compra[o].valor); 
    fscanf(fk, "%d\n", &compra[o].estado); 
    } 
    fclose(fk); 
    printf("\n\tFicheiro de compras lido <Enter> para continuar.\n");getch(); 

} 

///////////////////////////// Gravar Ficheiros ///////////////////////////////// 

void gravarficheiros(char sair, jogo *jogo, cliente *cliente, compra *compra) 
{ 
    int m, n, o; 
    FILE *fj, *fc, *fk; 

    // Grava ficheiro dos jogos 

    fj=fopen("jogos.txt", "w"); 
    for(m=1;m<NR;m++) 
    { 
     if(jogo[m].estado==1) 
     { 
      fprintf(fj,"%d\n%s\n%s\n%s\n%s\n%ld\n%d\n",jogo[m].idJogo,jogo[m].nomeJogo, 
     jogo[m].genero,jogo[m].empresa,jogo[m].plataforma,jogo[m].preco,jogo[m].estado); 
     } 
    } 
    fclose(fj); 

    // Grava ficheiro dos clientes 

    fc=fopen("clientes.txt", "w"); 
    for(n=1;n<NR;n++) 
    { 
     if(cliente[n].estado==1) 
     { 
      fprintf(fc,"%d\n%s\n%ld\n%s\n%d\n",cliente[n].idCliente,cliente[n].nomeCliente, 
     cliente[n].contacto,cliente[n].cidade,cliente[n].estado); 
     } 
    } 
    fclose(fc); 

    // Grava ficheiro de compras 

    fk=fopen("compras.txt", "w"); 
    for(o=1;o<NR;o++) 
    { 
     if(compra[o].estado==1) 
     { 
      fprintf(fk,"%d\n%d\n%d\n%s\n%s\n%s\n%ld\n%d\n",compra[o].idCompra,compra[o].idCliente, 
     compra[o].idJogo,compra[o].nomeJogo,compra[o].nomeCliente,compra[o].dataCompra, 
     compra[o].valor,compra[o].estado); 
     } 
    } 
    fclose(fj); 

    if (sair=='S') exit(0); 
    printf("\n\n\n\tFicheiros gravados <Enter> para continuar."); getch(); 

} 

//////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////// JOGOS ////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 

///////////////////////////// Consultar Jogos ////////////////////////////////// 

int consultarjogos(jogo *jogo) 
{ 
    int n; 
    system ("cls"); 
    printf("\n----------------------- LISTA DE JOGOS -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(jogo[n].estado==1) 
    { 
     printf("\n\tID: %d | Nome: %s | Genero: %s\n\tEmpresa: %s | ", jogo[n].idJogo, jogo[n].nomeJogo, jogo[n].genero, jogo[n].empresa); 
     printf("Plataforma: %s | Preco: %ld€\n", jogo[n].plataforma, jogo[n].preco); 
    } 
    } 
    printf("\n--------------------------------------------------------------\n"); 
    printf("\n\tListagem concluída. <Enter> para continuar."); 
    getch(); 
} 

///////////////////////////// Inserir Jogo ///////////////////////////////////// 

int inserirjogo(jogo *jogo) 
{ 
    int n; 
    system ("cls"); 
    fflush(stdin); 
    printf("\n----------------------- INSERIR JOGO -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(jogo[n].estado!=1) 
    { 
     jogo[n].idJogo=rand() % 999; 
     printf("\n\tNome do Jogo -> "); gets(jogo[n].nomeJogo); 
     printf("\n\tGenero -> "); gets(jogo[n].genero); 
     printf("\n\tEmpresa -> "); gets(jogo[n].empresa); 
     printf("\n\tPlataforma -> "); gets(jogo[n].plataforma); 
     printf("\n\tPreco (€) -> "); scanf("%ld", &jogo[n].preco); fflush(stdin); 
     jogo[n].estado=1; 
     printf("\n\n------------------------------------------------------------\n"); 
     printf("\n\tJogo inserido. <Enter> para continuar."); 
     getch(); 
     return(0); 
    } 
    } 
    printf("\n\tErro, não foi possivel inserir o jogo. <Enter> para continuar."); 
    getch(); return(1); 
} 

/////////////////////////////// Alterar Jogo /////////////////////////////////// 

int alterarjogo(jogo *jogo) 
{ 
    int n; 
    long int altjogo; 
    system("cls"); 
    printf("\n----------------------- ALTERAR JOGO -----------------------\n"); 
    printf("\n\tID do Jogo que pretende alterar: "); 
    scanf("%d", &altjogo); fflush(stdin); 
    for(n=1;n<NR;n++) 
    { 
    if(jogo[n].idJogo==altjogo) 
    { 
     jogo[n].estado=0; 
     printf("\n\n\tID: %d | Nome: %s | Genero: %s\n\tEmpresa: %s | ", jogo[n].idJogo, jogo[n].nomeJogo, jogo[n].genero, jogo[n].empresa); 
     printf("Plataforma: %s | Preco: %ld€", jogo[n].plataforma, jogo[n].preco); 
     printf("\n\n\tNome do Jogo -> "); gets(jogo[n].nomeJogo); 
     printf("\n\tGenero -> "); gets(jogo[n].genero); 
     printf("\n\tEmpresa -> "); gets(jogo[n].empresa); 
     printf("\n\tPlataforma -> "); gets(jogo[n].plataforma); 
     printf("\n\tPreco (€) -> "); scanf("%ld", &jogo[n].preco); fflush(stdin); 
     jogo[n].estado=1; 
     printf("\n\n------------------------------------------------------------\n"); 
     printf("\n\tJogo alterado. <Enter> para continuar."); 
     getch(); 
     return(0); 
    } 
    } 
    printf("\n\tErro, jogo não encontrado. <Enter> para continuar."); 
    getch(); return(1); 
} 

/////////////////////////////// Eliminar Jogo ////////////////////////////////// 

int eliminarjogo(jogo *jogo) 
{ 
    char conf; 
    int n; 
    long int elimjogo; 
    system("cls"); 
    printf("\n----------------------- ELIMINAR JOGO -----------------------\n"); 
    printf("\n\tID do Jogo que pretende eliminar: "); 
    scanf("%ld", &elimjogo); fflush(stdin); 
    for(n=1;n<NR;n++) 
    { 
    if(jogo[n].idJogo==elimjogo) 
    { 
     printf("\n\n\tID: %d | Nome: %s | Genero: %s\n\tEmpresa: %s | ", jogo[n].idJogo, jogo[n].nomeJogo, jogo[n].genero, jogo[n].empresa); 
     printf("Plataforma: %s | Preco: %ld€", jogo[n].plataforma, jogo[n].preco); 
     printf("\n\n\tTem a certeza que quer eliminar o jogo? <S/N>"); 
     conf=toupper(getch()); 
     if (conf!='S') return(1); 
     jogo[n].estado=0; 
     printf("\n\n-------------------------------------------------------------\n"); 
     printf("\n\tJogo eliminado. <Enter> para continuar."); 
     getch(); 
     return(0); 
    } 
    } 
    printf("\n\tErro, jogo não encontrado. <Enter> para continuar."); 
    getch(); return(1); 
} 

///////////////////////////// Menu Gerir Jogos ///////////////////////////////// 

int gerirjogos(jogo *jogo) 
{ 
    system("cls"); 
    char op; 
    do { 
    printf("\n----------------------- GERIR JOGOS -----------------------\n"); 
    printf("\n\t 1 - Consultar Jogos\n\t 2 - Inserir Jogo\n\t 3 - Alterar Jogo\n\t 4 - Eliminar Jogo\n\t 0 - Voltar"); 
    printf("\n\n-----------------------------------------------------------\n"); 
    printf("\n\t Opcao:"); op=getch(); 
    } while(op<'0' || op>'4'); 
    switch (op){ 
    case '1': consultarjogos(jogo); break; 
    case '2': inserirjogo(jogo); break; 
    case '3': alterarjogo(jogo); break; 
    case '4': eliminarjogo(jogo); break; 
    case '0': return(0);   break; 
    } 
} 

//////////////////////////////////////////////////////////////////////////////// 
///////////////////////////////// CLIENTES ///////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 

////////////////////////// Consultar Clientes ////////////////////////////////// 

int consultarclientes(cliente *cliente) 
{ 
    int n; 
    system ("cls"); 
    printf("\n----------------------- LISTA DE CLIENTES -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(cliente[n].estado==1) 
    { 
     printf("\n\tID: %d | Nome: %s", cliente[n].idCliente, cliente[n].nomeCliente); 
     printf("\n\tContacto: %ld | Cidade: %s\n", cliente[n].contacto, cliente[n].cidade); 
    } 
    } 
    printf("\n-----------------------------------------------------------------\n"); 
    printf("\n\tListagem concluída. <Enter> para continuar."); 
    getch(); 
} 

///////////////////////////// Inserir Cliente ////////////////////////////////// 

int inserircliente(cliente *cliente) 
{ 
    int n; 
    system ("cls"); 
    fflush(stdin); 
    printf("\n----------------------- INSERIR CLIENTE -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(cliente[n].estado!=1) 
    { 
     cliente[n].idCliente=rand() % 999; 
     printf("\n\tNome do Cliente -> "); gets(cliente[n].nomeCliente); 
     printf("\n\tContacto -> "); scanf("%ld", &cliente[n].contacto); fflush(stdin); 
     printf("\n\tCidade -> "); gets(cliente[n].cidade); 
     cliente[n].estado=1; 
     printf("\n\n---------------------------------------------------------------\n"); 
     printf("\n\tCliente inserido. <Enter> para continuar."); 
     getch(); return(0); 
    } 
    } 
    printf("\n\tErro, não foi possivel inserir o cliente. <Enter> para continuar."); 
    getch(); return(1); 
} 

/////////////////////////////// Alterar Cliente //////////////////////////////// 

int alterarcliente(cliente *cliente) 
{ 
    int n; 
    long int altcliente; 
    system("cls"); 
    printf("\n----------------------- ALTERAR CLIENTE -----------------------\n"); 
    printf("\n\tID do Cliente que pretende eliminar: "); 
    scanf("%d", &altcliente); fflush(stdin); 
    for(n=1;n<NR;n++) 
    { 
    if(cliente[n].idCliente==altcliente) 
    { 
     cliente[n].estado=0; 
     printf("\n\n\tID: %d | Nome: %s | ", cliente[n].idCliente, cliente[n].nomeCliente); 
     printf("\n\tContacto: %ld | Cidade: %s", cliente[n].contacto, cliente[n].cidade); 
     printf("\n\n\tNome do Cliente -> "); gets(cliente[n].nomeCliente); 
     printf("\n\tContacto -> "); scanf("%ld", &cliente[n].contacto); fflush(stdin); 
     printf("\n\tCidade -> "); gets(cliente[n].cidade); 
     cliente[n].estado=1; 
     printf("\n\n---------------------------------------------------------------\n"); 
     printf("\n\tCliente alterado. <Enter> para continuar."); 
     getch(); return(0); 
    } 
    } 
    printf("Erro, cliente não encontrado. <Enter> para continuar."); 
    getch(); return(1); 
} 

//////////////////////////// Eliminar Cliente ////////////////////////////////// 

int eliminarcliente(cliente *cliente) 
{ 
    char conf; 
    int n; 
    long int elimcliente; 
    system("cls"); 
    printf("\n----------------------- ELIMINAR CLIENTE -----------------------\n"); 
    printf("\n\tID do Cliente que pretende eliminar: "); 
    scanf("%ld", &elimcliente); fflush(stdin); 
    for(n=1;n<NR;n++) 
    { 
    if(cliente[n].idCliente==elimcliente) 
    { 
     printf("\n\n\tID: %d | Nome: %s | ", cliente[n].idCliente, cliente[n].nomeCliente); 
     printf("\n\tContacto: %ld | Cidade: %s", cliente[n].contacto, cliente[n].cidade); 
     printf("\n\n\tTem a certeza que quer eliminar o cliente? <S/N>"); 
     conf=toupper(getch()); 
     if (conf!='S') return(1); 
     cliente[n].estado=0; 
     printf("\n\n----------------------------------------------------------------\n"); 
     printf("\n\tCliente eliminado. <Enter> para continuar."); 
     getch(); 
     return(0); 
    } 
    } 
    printf("\n\tErro, cliente não encontrado. <Enter> para continuar."); 
    getch(); return(1); 
} 

///////////////////////////// Menu Gerir Clientes ////////////////////////////// 

int gerirclientes(cliente *cliente) 
{ 
    system("cls"); 
    char op; 
    do { 
    printf("\n----------------------- GERIR CLIENTES -----------------------\n"); 
    printf("\n\t 1 - Consultar Clientes\n\t 2 - Inserir Cliente\n\t 3 - Alterar Cliente\n\t 4 - Eliminar Cliente\n\t 0 - Voltar"); 
    printf("\n\n--------------------------------------------------------------\n"); 
    printf("\n\t Opcao:"); op=getch(); 
    } while(op<'0' || op>'4'); 
    switch (op){ 
    case '1': consultarclientes(cliente); break; 
    case '2': inserircliente(cliente); break; 
    case '3': alterarcliente(cliente); break; 
    case '4': eliminarcliente(cliente); break; 
    case '0': return(0);     break; 
    } 
} 

//////////////////////////////////////////////////////////////////////////////// 
///////////////////////////////// COMPRAS ////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 

///////////////////////////// Consultar Compras //////////////////////////////// 

int consultarcompras(compra *compra) 
{ 
    int n; 
    system ("cls"); 
    printf("\n----------------------- REGISTO DE COMPRAS -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(compra[n].estado==1) 
    { 
     printf("\n\tID Compra: %d | ID Jogo: %d | ID Cliente: %d", compra[n].idCompra, compra[n].idJogo, compra[n].idCliente); 
     printf("\n\tNome do Jogo: %s | Nome do Cliente: %s", compra[n].nomeJogo, compra[n].nomeCliente); 
     printf("\n\tData da Compra: %s | Valor da Compra: %ld€\n", compra[n].dataCompra, compra[n].valor); 
    } 
    } 
    printf("\n------------------------------------------------------------------\n"); 
    printf("\n\tListagem concluída. <Enter> para continuar."); 
    getch(); 
} 

///////////////////////////////// Nova Compra ////////////////////////////////// 

int novacompra(compra *compra, jogo *jogo, cliente *cliente) 
{ 
    int n, m, o, idj, idc; 
    system ("cls"); 
    printf("\n----------------------- NOVA COMPRA -----------------------\n"); 
    for(n=1;n<NR;n++) 
    { 
    if(compra[n].estado!=1) 
    { 
     compra[n].idCompra=rand() % 999; 
     printf("\n\tID do Jogo -> "); scanf("%d", &idj); fflush(stdin); 
     for(m=1;m<NR;m++) 
     { 
     if(jogo[m].idJogo == idj) 
     { 
      printf("\n\tNome do Jogo: %s", jogo[m].nomeJogo); 
      compra[n].idJogo = jogo[m].idJogo; 
      strcpy(compra[n].nomeJogo, jogo[m].nomeJogo); 
      compra[n].valor = jogo[m].preco; 
      printf("\n\n\tID do Cliente -> "); scanf("%d", &idc); fflush(stdin); 
      for(o=1;o<NR;o++) 
      { 
      if(cliente[o].idCliente == idc) 
      { 
       printf("\n\tNome do Cliente: %s", cliente[o].nomeCliente); 
       compra[n].idCliente = cliente[o].idCliente; 
       strcpy(compra[n].nomeCliente, cliente[o].nomeCliente); 
       printf("\n\n\tData da Compra (dd/mm/aaaa) -> "); scanf("%s", compra[n].dataCompra); 
       printf("\n\tValor: %ld€", compra[n].valor); 
       compra[n].estado=1; 
       printf("\n\n-----------------------------------------------------------\n"); 
       printf("\n\tCompra registada. <Enter> para continuar."); 
       getch(); return(0); 
      } 
      } 
     } 
     } 
    } 
    } 
    printf("\n\tErro, não foi possivel concluir a compra. <Enter> para continuar."); 
    getch(); return(1); 
} 

//////////////////////////// Eliminar Compra /////////////////////////////////// 

int eliminarcompra(compra *compra) 
{ 
    char conf; 
    int n; 
    long int elimcompra; 
    system("cls"); 
    printf("\n----------------------- ELIMINAR COMPRA -----------------------\n"); 
    printf("\n\tID da Compra que pretende eliminar: "); 
    scanf("%ld", &elimcompra); fflush(stdin); 
    for(n=1;n<NR;n++) 
    { 
    if(compra[n].idCompra==elimcompra) 
    { 
     printf("\n\n\tID Compra: %d | ID Jogo: %d | ID Cliente: %d", compra[n].idCompra, compra[n].idJogo, compra[n].idCliente); 
     printf("\n\tNome do Jogo: %s | Nome do Cliente: %s", compra[n].nomeJogo, compra[n].nomeCliente); 
     printf("\n\tData da Compra: %s | Valor da Compra: %ld€", compra[n].dataCompra, compra[n].valor); 
     printf("\n\n\tTem a certeza que quer eliminar a compra? <S/N>"); 
     conf=toupper(getch()); 
     if (conf!='S') return(1); 
     compra[n].estado=0; 
     printf("\n\n---------------------------------------------------------------\n"); 
     printf("\n\tCompra eliminada. <Enter> para continuar."); 
     getch(); 
     return(0); 
    } 
    } 
    printf("\n\tErro, registo da compra não encontrado. <Enter> para continuar."); 
    getch(); return(1); 
} 

///////////////////////////// Menu Gerir Compras /////////////////////////////// 

int gerircompras(compra *compra, jogo *jogo, cliente *cliente) 
{ 
    system("cls"); 
    char op; 
    do { 
    printf("\n----------------------- GERIR COMPRAS -----------------------\n"); 
    printf("\n\t 1 - Consultar Compras\n\t 2 - Nova Compra\n\t 3 - Eliminar Compra\n\t 0 - Voltar"); 
    printf("\n\n-------------------------------------------------------------\n"); 
    printf("\n\t Opcao:"); op=getch(); 
    } while(op<'0' || op>'3'); 
    switch (op){ 
    case '1': consultarcompras(compra);    break; 
    case '2': novacompra(compra, jogo, cliente);  break; 
    case '3': eliminarcompra(compra);     break; 
    case '0': return(0);        break; 
    } 
} 

//////////////////////////////////////////////////////////////////////////////// 
///////////////////////////////// MAIN ///////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////// 

main() 
{ 
    system("COLOR 1F"); 
    char op, sair='N'; 
    int n; 
    srand(time(NULL)); 
    jogo jogo[NR]; 
    cliente cliente[NR]; 
    compra compra[NR]; 
    system ("chcp 1252"); 
    for(n=1;n<NR;n++) 
    { 
    jogo[n].estado=0; 
    cliente[n].estado=0; 
    compra[n].estado=0; 
    } 
    lerficheiros(jogo, cliente, compra); 
    for(;;) 
    { 
    do 
    { 
    system("cls"); 
    printf("\n----------------------- LOJA DE JOGOS -----------------------\n"); 
    printf("\n\t 1 - Gerir Jogos\n\t 2 - Gerir Clientes\n\t 3 - Gerir Compras"); 
    printf("\n\t 4 - Ler Ficheiros\n\t 5 - Gravar Ficheiros \n\t 0 - Sair"); 
    printf("\n\n-------------------------------------------------------------\n"); 
    printf("\n\t Opcao:"); op=getch(); 
    }while (op<'0' || op>'5'); 
    switch (op) { 
    case '1': gerirjogos(jogo);        break; 
    case '2': gerirclientes(cliente);       break; 
    case '3': gerircompras(compra, jogo, cliente);    break; 
    case '4': lerficheiros(jogo, cliente, compra);    break; 
    case '5': gravarficheiros(sair, jogo, cliente, compra); break; 
    case '0': sair='S'; gravarficheiros(sair, jogo, cliente, compra); 
    } 
} 
} 
+0

第一個是容易通過把一個環子菜單中的功能做。第二個更難,因爲例如,退格鍵由鍵盤驅動程序處理,永遠不會到達您的程序。 – user3386109

+2

我投票結束這個問題太廣泛了...(哎呀....我沒有足夠的積分到我的帳戶)。問題是,你向我們遞交了一堆沒有與問題相關的代碼片段的問題。 – Mike

+1

這是不可能的解釋爲什麼*在每個函數中,我都有一個「return *」,但是在沒有看到您使用的代碼的情況下,它們會返回到main而不是sub menu。關於第二個問題,是的。 。在當前的代碼中,也不可能告訴你如何這樣做,因爲**我們看不到你當前的代碼**。請自己幫忙:在[help]中花點時間,特別是[How do我在這裏問一個好問題?](http://stackoverflow.com/help/how-to-ask),然後發佈你的下一個問題在這裏。 –

回答

0

據我的理解:

#include <stdio.h> 
#include <string.h> 

void pause(void); 
void print_result(char **menu, int ret); 
void clrscr(void); 

#define MENU_INPUT(a) menu_input(a,sizeof(a)/sizeof(*a)) 


char * main_menu[]={ 
    "Display First Menu", 
    "Display Sencond Menu" 
    }; 

char * first_menu[]={ 
    "Format Drive C:", 
    "Partition First Drive", 
    "Scan Drive" 
    }; 
char * second_menu[]={ 
    "Display an image", 
    "Play a sound" 
    }; 


int menu_input(char **menu,int items){ 
    int i, j; 

    clrscr(); 

    for(i = 1; i<=items;i++) 
     printf(" %d - %s\n",i, menu[i-1]); 

    printf(" 0 - to cancel\n "); 

    do{ 
     scanf("%d", &i); 
    }while(i < 0 || i > items); 

    return i; 
} 





int main(void){ 
    int ret; 
    for(; ;){ 
     switch(MENU_INPUT(main_menu)){ 
      case 0: 
       return 0; 
      case 1: 
       ret = MENU_INPUT(first_menu); 
       print_result(first_menu, ret); 
       break; 
      case 2: 
       ret= MENU_INPUT(second_menu); 
       print_result(second_menu, ret); 
     } 
    } 

    return 0; 
} 


// these are some helpper functions 

void pause(void){ 
    char c; 
    printf("press enter to continue\n"); 
    scanf(" %c", &c); 
} 


void print_result(char **menu, int ret){ 
    if(ret){ 
     printf("You pressed %d (%s)\n", ret, first_menu[ ret - 1 ]); 
     pause(); 
    } 
} 


// clear screen 
void clrscr(void){ 
#ifdef WIN32 
    char *cmd = "cls"; 
#else 
    char *cmd = "tput reset"; 
#endif 

    system(cmd); 
} 
+0

我會試試這個,謝謝:) –

相關問題