您的位置:首页 > 编程语言 > C语言/C++

C语言操作界面菜单思考

2017-06-25 23:51 597 查看
C语言中,制作菜单操作界面是很常见的,一般都是通过scanf("%d",&i) 与switch(i)搭配来使用,这种方法很基础,我近来发现另外一种比较不错的方法,容错处理也有,可拓展性也高:
#define BUFFERSIZE 256
enum login_register_status {_f_main_, _login_id_, _login_passwd_, _udpport_, _register_name_, _register_passwd_};
static struct
{
enum login_register_status status;
int buf_size;                        //从标准输入中获取的字节个数
int display;                         //根据需要,可以选择添加这个变量,控制显示设计
char *buf;                           //从标准输入获取的字节存放的位置,同buf_size一起使用
}f_menu;

static void init_f_menu()             //初始化菜单
{
f_menu.status = _f_main_;
f_menu.display = 1;
f_menu.buf_size = BUFFERSIZE;             //一次从标准输入获取的字节共个数
f_menu.buf = malloc(BUFFERSIZE);
}

//通过这个枚举形式,本质上主界面和子界面是同一等级
static void fun_f_menu()
{
if(_f_main_ == f_menu.status)
printf("1.登录  2.注册  3.退出\n");	         //主界面
else if(_login_id_ == f_menu.status)
printf("请输入ID:\n"); 						//以下5个分级子界面,本质上和主界面同一等级
else if(_login_passwd_ == f_menu.status)
printf("请输入密码:\n");
else if(_udpport_ == f_menu.status)
printf("请输入监听的UDP端口\n");
else if(_register_name_ == f_menu.status)
printf("请输入姓名:\n");
else if(_register_passwd_ == f_menu.status)
printf("请输入密码:\n");
}

static void do_f_menu()
{
int nret;
scanf("%s", f_menu.buf);
//主界面的操作选项,通过从buf中获取的不同的数值,设置不同的f_menu.status,进行不同的操作
if(f_menu.status == _f_main_)
{
int num;
sscanf(f_menu.buf, "%d", &num);
if(1 == num)
f_menu.status = _login_id_;
else if(2 == num)
{
f_menu.status = _register_name_;
}
else if(3 == num)
{
exit(1);
}
else
{
printf("输入错误\n");
f_menu.status = _f_main_;
}
}
//根据不同status,来选择不同界面操作
else if(f_menu.status == _login_id_)
{
/*   *** */
f_menu.status = ***       //下一个界面
}
else if(f_menu.status == _login_passwd_)
{
/*   *** */
f_menu.status = ***       //下一个界面
}
else if(f_menu.status == _udpport_)
{
/*   *** */
f_menu.status = ***       //下一个界面
}
else if(f_menu.status == _register_name_)
{
/*   *** */
f_menu.status = ***       //下一个界面
}
else if(f_menu.status == _register_passwd_)
{
/*   *** */
f_menu.status = ***       //下一个界面
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: