功能结束后返回菜单
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;
}
}
}
我有一个菜单可以从一些选项中进行选择,我希望我的程序在 运行 与所选选项对应的功能出现后立即返回它。 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;
}
}
}