模块化菜单,初学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;
}
小心你号没了 名字QQ暴露了,最好遮掩一下 咋被删了{:1_889:} tlf 发表于 2021-11-10 14:44
还c++呢?!
C++肯定不是这样写的,我这样写和C语言差不多了,只是刚刚学还没有学到后面的面向对象的知识,所以发出来主要是想看看大佬们的一些建议 某神隐 发表于 2021-11-10 11:11
名字QQ暴露了,最好遮掩一下
尴尬,我会认真看看版规的{:1_896:} 还有很长的路要走。
页:
[1]