魔兽争霸技能附加属性的获取途径有哪些
在C++中制作交互式选择菜单,主要通过条件分支结构和函数指针两种核心方式实现。以下将详细分析两种方法的技术细节及适用场景,并附对比表格。
一、Switch语句实现菜单(基础方案)
原理:利用switch-case
结构根据用户输入的选项值跳转到对应分支。这是最直观的实现方式,适合选项数量有限且静态的场景。
cpp
include
using namespace std;
int main {
char choice;
while(true) {
cout<< "菜单: A(添加) D(删除) S(排序) Q(退出)
请选择:";
cin >> choice;
switch(toupper(choice)) {
case 'A': cout<< "数据已添加
; break;
case 'D': cout<< "数据已删除
; break;
case 'S': cout<< "数据已排序
; break;
case 'Q': exit(0);
default: cout<< "无效选项
;
return 0;
特点:
二、函数指针实现菜单(进阶方案)
原理:通过函数指针数组或结构体将菜单选项与处理函数动态绑定,适合需要灵活扩展的场景。
cpp
include
using namespace std;
// 定义函数指针类型
typedef void (MenuFunc);
// 菜单处理函数
void Add { cout<< "执行添加操作
; }
void Delete { cout<< "执行删除操作
; }
struct MenuItem {
char key;
string desc;
MenuFunc func;
};
int main {
MenuItem items[] = {
{'A', "添加", Add},
{'D', "删除", Delete}
};
char input;
while(true) {
cout<< "==== 菜单 ====
;
for(auto &item : items)
cout<< item.key<< ") "<< item.desc<< endl;
cout<< "Q) 退出
选择:";
cin >> input;
if(toupper(input) == 'Q') break;
for(auto &item : items) {
if(toupper(input) == item.key) {
item.func;
break;
return 0;
优势:
三、方案对比与适用场景
| 特性 | Switch语句 | 函数指针 |
||--|-|
|代码复杂度 | 低(适合简单菜单) | 中(需设计数据结构) |
|扩展性 | 差(需修改switch结构) | 优(动态添加/删除菜单项) |
|维护成本 | 高(选项多时代码冗长) | 低(逻辑与数据分离) |
|适用场景 | 选项少于10个的静态菜单 | 大型系统或需要动态加载的菜单 |
四、高级技巧:结合控制台API
对于需要方向键控制的图形化菜单(如控制台应用),可调用Windows API实现光标移动与颜色高亮:
cpp
include
void SetColor(int color) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
void Gotoxy(int x, int y) {
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
通过Gotoxy
控制光标位置,SetColor
改变文本颜色,实现交互式菜单的动态效果。