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