马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我正在写一个图书管理系统(准确地说是: copy代码然后在屎山旁边拉一坨)
然后我考虑到每次要录入或者修改数据, 可能人家点进来之后就反悔了或者想回去查看以下数据, 这个时候就不能强制人家输入, 而是如果人家直接输入Return就回去
它的原代码如下void LibraryManager::Add_book(book **q)//增加图书信息
{
char m;
std::cout << "请按照如下顺序输入图书信息! " << std::endl;
book *p;//定义book类指针
p = new book;//申请存储空尾间
std::cout << "本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格" << std::endl;
std::cin >> *p;
if (*q == NULL)//检查链表是否为空链表
{
p->next = NULL;
*q = p;
}//如果链表为空则把链表头指向p
else
{
p->next = NULL;//p是倒数第二个节点,next指针中保存这尾节点的地址值,p指向尾节点
(zbook)->next = p;//如果链表不为空则把链表尾指向p
}
zbook = p;
std::cout << "添加成功,是否继续添加:是Y,否N:" << std::endl;
std::cin.clear();
std::cin.ignore(1024, '\n');
std::cin >> m;
while ((m != 'Y'&& m != 'y' && m != 'N' && m != 'n') || std::cin.good() == FALSE)
{
std::cout << "输入错误,请重新输入:" << std::endl;
std::cin.clear();
std::cin.ignore(1024, '\n');
std::cin >> m;
}
if (m == 'Y' || m == 'y')
{
Add_book(&abook);
exit(EXIT_SUCCESS);
}
else if (m == 'N' || m == 'n')
{
std::cout << "正在返回到菜单,请勿操作" << std::endl;
Sleep(1500);//停滞1.5s再继续
system("cls");//清屏
Menu();
exit(EXIT_SUCCESS);
}
}
然后我改之后的如下void LibraryManager::Add_book(book **q)//增加图书信息
{
//以下代码加入了输入Return就返回的功能, 但是有bug(输入之后会直接跳到错误)
//我的想法是, 将用户输入的内容和"Return"对比, 如果一样就返回, 如果不一样就流给*p
//但是, 没办法直接将ifReturn的内容流给*p(也可能是我不会)
//然后我就想把第一个数据给赋值过去, 但是它会往后面串一个emm
/*
char m;
std::cout << "请按照如下顺序输入图书信息, 如要返回请输入"Return!" " << std::endl;
book *p;//定义book类指针
p = new book;//申请存储空尾间
std::cout << "本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格" << std::endl;
std::string ifReturn;
std::getline(std::cin, ifReturn);
if ((ifReturn.compare("Return")) == 0)
{
std::cout << "正在返回到菜单,请勿操作" << std::endl;
Sleep(1500);//停滞1.5s再继续
system("cls");//清屏
Menu();
exit(EXIT_SUCCESS);
}
else
{
std::stringstream ss(ifReturn);
std::cin.rdbuf(ss.rdbuf());
}
std::cin >> *p;
if (*q == NULL)//检查链表是否为空链表
{
p->next = NULL;
*q = p;
}//如果链表为空则把链表头指向p
else
{
p->next = NULL;//p是倒数第二个节点,next指针中保存这尾节点的地址值,p指向尾节点
(zbook)->next = p;//如果链表不为空则把链表尾指向p
}
zbook = p;
std::cout << "添加成功,是否继续添加:是Y,否N:" << std::endl;
std::cin.clear();
std::cin.ignore(1024, '\n');
std::cin >> m;
while ((m != 'Y'&& m != 'y' && m != 'N' && m != 'n') || std::cin.good() == FALSE)
{
std::cout << "输入错误,请重新输入:" << std::endl;
std::cin.clear();
std::cin.ignore(1024, '\n');
std::cin >> m;
}
if (m == 'Y' || m == 'y')
{
Add_book(&abook);
exit(EXIT_SUCCESS);
}
else if(m == 'N' || m == 'n')
{
std::cout << "正在返回到菜单,请勿操作" << std::endl;
Sleep(1500);//停滞1.5s再继续
system("cls");//清屏
Menu();
exit(EXIT_SUCCESS);
}
*/
}
运行的时候, 就会无限出现: 输入错误请重试!
另外,明明都已经用了cin.clear();还有cin.ignore(100, '\n');了,为啥缓冲区的错误还是存在呢? |