模块化菜单,初学C++写的

模块化菜单,初学C++写的,写的不太好,以后要多多向大佬们学习学习!

#include <iostream>
 
//Menu_s:菜单字符数组 number:菜单文字编号,从1开始
unsigned int menu(const char **Menu_s, unsigned int number);
bool input_check(void);
 
int main(void)
{
    unsigned int ret;
    const char *Menu_s[] =
    {
        "查找",
        "排序",
        "添加",
        "删除",
        "帮助",
    };
    ret = menu(Menu_s, sizeof(Menu_s)/sizeof(char*));
    std::cout << "ret:" << ret;
    std::cout << " choose:" << Menu_s[ret-1] << std::endl;
     
    std::cout << "--------------" << std::endl;
    std::cout << "done!";
    std::cin.get();
    return 0;
}
 
unsigned int menu(const char **Menu_s, unsigned int number)
{
    if(Menu_s == NULL || number == 0)
    {
        return 0;
    }
    unsigned int input;
    int i;
 
    std::cout << "-----menu-----" << std::endl;
    for(i = 0; i < number; ++i)
    {
        std::cout << "[" << i+1 << "] ";
        std::cout << Menu_s[i] << std::endl;
    }
 
    //输入数据
    bool is_ok = false;
    std::cout << "--------------" << std::endl;
    std::cout << "Please enter the number:";
    std::cin >> input;
    // 判断输入类型是否正确和输入的数字范围是否在菜单列表中,不在则输入错误重新输入
    while( ((is_ok = input_check()) == false) || (input > number || input <= 0) )
    {
        std::cout << "Input error please re-enter:";
        std::cin >> input;
    }
 
    return input;
}
 
bool input_check(void)
{
     
    if(std::cin.fail() == true) //fail是true,代表输入数据类型和cin传入变量的数据类型不一致
    {
        std::cin.clear(); //此处用cin.clear()这个函1数进行流标志复位,使得cin.fail恢复正常
        //读取缓冲区的剩余字符
        while(std::cin.get() != '\n');
        return false;
    }
    else
    {
        char tmp;
        //当输入类型正确时也去除缓冲区多余的数据 并处理第一个字符输入正确 其它字符输入错误的情况
        tmp = std::cin.get();
        if(tmp != '\n')
        {
            //说明输入了其它数据
            while((std::cin.get()) != '\n');
            return false;
        }
 
    }
    return true;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天的大鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值