caoxiaolin 发表于 2021-11-10 10:04

模块化菜单,初学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 << 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 << 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;
}

只有午安 发表于 2021-11-10 11:17

小心你号没了

某神隐 发表于 2021-11-10 11:11

名字QQ暴露了,最好遮掩一下

qwe2271156 发表于 2021-11-10 12:16

咋被删了{:1_889:}

tlf 发表于 2021-11-10 14:44

caoxiaolin 发表于 2021-11-10 16:12

tlf 发表于 2021-11-10 14:44
还c++呢?!

C++肯定不是这样写的,我这样写和C语言差不多了,只是刚刚学还没有学到后面的面向对象的知识,所以发出来主要是想看看大佬们的一些建议

caoxiaolin 发表于 2021-11-10 16:21

某神隐 发表于 2021-11-10 11:11
名字QQ暴露了,最好遮掩一下

尴尬,我会认真看看版规的{:1_896:}

herobin666 发表于 2021-11-11 15:08

还有很长的路要走。
页: [1]
查看完整版本: 模块化菜单,初学C++写的