【发布时间】:2014-12-04 22:29:39
【问题描述】:
我正在创建一个决策程序,但我希望我调用的一些函数能够返回到之前的函数。如何在不使用间接递归的情况下做到这一点?
我想要它做的一个例子是这样的:
Introduce la contrasena:
15
Bienvenido!
Menu principal, Elegir una opcion:
1: Comprar
2: Atencion al Cliente
0: Salir
>>>>2
Menu atencion al cliente. Elegir una opcion:
a: Devolver
b: Cambiar
c: Volver al menu principal
>>>>c
Opcion volver al menu anterior
Menu principal, Elegir una opcion:
1: Comprar
2: Atencion al Cliente
0: Salir
>>>>0
Presione cualquier tecla para salir:
>>>>
这就是它的实际作用:
Introduce la contrasena:
15
Bienvenido!
Menu principal, Elegir una opcion:
1: Comprar
2: Atencion al Cliente
0: Salir
>>>>2
Menu atencion al cliente. Elegir una opcion:
a: Devolver
b: Cambiar
c: Volver al menu principal
>>>>c
Opcion volver al menu anterior
我需要添加什么才能使其在不使用间接递归的情况下工作?
谢谢!
这是我的 c 程序: 主要:
#include "Ejercicio27.h"
main()
{
int contrasena = 0;
printf("Introduce la contrasena: \n");
scanf("%i", &contrasena);
bonito(contrasena);
if (bonito(contrasena) == 0)
{
printf("La contrasenia es incorrecta, presiona cualquier tecla para continuar:\n>>>>");
getchar();
getchar();
exit(1);
}
else
printf("Bienvenido!\n");
menu();
}
在funciones.c中:
#include "Ejercicio27.h"
bonito(int numero)
{
if ((numero % 2 == 0 || numero % 3 == 0) && numero % 5 == 0)
return numero;
else
return 0;
}
void comprar(void)
{
printf("Hola comprar\n");
// menu();
}
atencion(void)
{
//getchar();
char opcion;
do{
printf("Menu atencion al cliente. Elegir una opcion: \na: Devolver\nb: Cambiar\nc: Volver al menu principal\n>>>>");
scanf("%c", &opcion);
getchar();
switch (opcion)
{
case 'a':
case 'A':
printf("Opcion devolver\n");
break;
case 'b':
case 'B':
printf("Opcion cambiar\n");
break;
case 'c':
case 'C':
printf("Opcion volver al menu anterior\n");
break;
default:
break;
}
}while (opcion !='a' && opcion != 'A' && opcion != 'b' && opcion != 'B' && opcion != 'c' && opcion != 'B');
//menu();
}
salir(void)
{
printf("Presione cualquier tecla para salir: \n>>>>");
getchar();
return;//exit(1);
}
menu(void)
{
int opcion = 3;
do{
printf("Menu principal, Elegir una opcion:\n1: Comprar\n2: Atencion al Cliente\n0: Salir\n>>>>");
scanf("%i", &opcion);
getchar();
switch (opcion)
{
case 1:
comprar();
return;
break;
case 2:
atencion();
return;
break;
case 0:
salir();
return;
break;
default:
break;
}
getchar();
}while (opcion != 0 && opcion != 1 && opcion != 2);
}
在 ejercicio27.h 中:
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#include <stdlib.h>
//int opcion = 0;
int bonito(int);
void comprar(void);
void atencion(void);
void salir(void);
void menu(void);
【问题讨论】:
-
return退出当前函数,在调用者调用它之后立即恢复执行 -
好的,所以这给我留下了两个选择:或者使用替代品返回(退出),或者创建一个在退出菜单时调用菜单的循环。
-
我建议使用状态机方法。
-
谢谢,我会调查的。
标签: c function recursion switch-statement decision-tree