Search code examples
cfunctionmenuback

Get back to the menu after the function is over


I have a menu to choose from some options and I want my program to go back to it as soon as it runs the function corresponding to the option that was selected. IE: I have the ler_dados_estudante function and I want to go back to my menu once I finish the data input. I already tried to run the main function again, but that will clear my inputs since it restarts my variables.

#define LIMITE 31
#define MAX_ALUNOS 2

typedef struct
{
    int numero;
    int notaFinal;
    char nome[LIMITE];
} tEstudante;

int validar_insert (int minimo, int maximo);
int ler_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
void mostrar_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
void alterar_dados_aluno(tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
int menu();

void main(void)
{
    tEstudante vAlunos[MAX_ALUNOS];

    int numAlunos = 0;
    int option;

    option = menu();

    switch(option)
    {
    case 1:
        printf("Inserir dados\n");
        ler_dados_estudante(vAlunos, numAlunos);
        break;

    case 2:
        printf("Mostrar dados dos estudantes\n");
        // mostrar_dados_estudante(vAlunos, numAlunos);
        break;

    case 3:
        printf("Alterar notas finais dos estudantes\n");
        //alterar_dados_aluno(vAlunos, numAlunos);
        break;

    case 4:
        printf("Estatisticas das avaliacoes\n");
        break;

    case 5:
        printf("Gravar dados em ficheiro\n");
        break;

    case 6:
        printf("Ler dados do ficheiro\n");
        break;

    case 0:
        printf("Sair");
        break;
    }
}

int menu ()
{
    int opcao;

    do
    {
        printf("1 - Inserir dados do estudante");
        printf("\n2 - Mostrar dados dos destudantes");
        printf("\n3 - Alterar notas finais do estudantes");
        printf("\n4 - Estatisticas das avaliacoes");
        printf("\n5 - Gravar dados em ficheiro");
        printf("\n6 - Ler dados de ficheiro");
        printf("\n0 - Fim\n\n");

        printf("Escolha uma opcao:\n");
        scanf("%i", &opcao);

        printf("\n");

        if (opcao != 1 && opcao != 2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6 && opcao != 0)
            printf("Opcao invalida !\n\n");
    }
    while (opcao != 1 && opcao != 2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6 && opcao != 0);

    return opcao;
}

int validar_insert (int minimo, int maximo)
{
    int valor;

    do
    {
        scanf("%i", &valor);

        if (valor < minimo || valor > maximo)
        {
            printf("\nValor fora do intervalo aceitavel!\n");
            printf("\nInserir dados novamente:\n");
        }

        else
            return valor;
    }
    while (valor < minimo || valor > maximo);
}

int ler_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos)
{

    int numero;
    int nota;
    char nome;
    int i;

    for (i = 0; i < MAX_ALUNOS; i++)
    {

        printf("Insira o numero do aluno: \n");
        numero = validar_insert (2150001, 2169999);
        vAlunos[i].numero = numero;

        printf("Insira a nota final do aluno: \n");
        nota = validar_insert (0, 20);
        vAlunos[i].notaFinal = nota;

        printf("Insira o nome do aluno: \n");
        scanf(" %[^\n]s", vAlunos[i].nome);

        printf("\n");

        numAlunos++;

    }
}

Solution

  • Use a loop inside your main

    void main(void)
    {
        tEstudante vAlunos[MAX_ALUNOS];
    
        int numAlunos = 0;
        int option = 1;
    
        while (option != 0) 
        {
            option = menu();
    
            switch(option)
            {
            case 1:
                printf("Inserir dados\n");
                ler_dados_estudante(vAlunos, numAlunos);
                break;
    
            case 2:
                printf("Mostrar dados dos estudantes\n");
                // mostrar_dados_estudante(vAlunos, numAlunos);
                break;
    
            case 3:
                printf("Alterar notas finais dos estudantes\n");
                //alterar_dados_aluno(vAlunos, numAlunos);
                break;
    
            case 4:
                printf("Estatisticas das avaliacoes\n");
                break;
    
            case 5:
                printf("Gravar dados em ficheiro\n");
                break;
    
            case 6:
                printf("Ler dados do ficheiro\n");
                break;
    
            case 0:
                printf("Sair");
                break;
            }
        }
    }