功能结束后返回菜单

Get back to the menu after the function is over

我有一个菜单可以从一些选项中进行选择,我希望我的程序在 运行 与所选选项对应的功能出现后立即返回它。 IE:我有 ler_dados_estudante 功能,我想在完成数据输入后返回我的菜单。我已经尝试再次 运行 main 函数,但这会清除我的输入,因为它会重新启动我的变量。

#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++;

    }
}

在主程序中使用循环

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;
        }
    }
}