|
|
发表于 2023-6-12 23:15:23
|
显示全部楼层
看起来问题可能在于你的 book 类对输入流的处理方式。这可能是因为你的 operator>> 实现不适用于从空白字符(例如空格)分隔的字符串流中读取。
为了解决这个问题,你需要确保你的 book 类可以正确地从 std::istringstream 对象中读取。如果你的 book 类的输入运算符已经适当地重载,那么你应该可以像这样处理它:
- std::istringstream iss(userInput);
- iss >> p->login_number >> p->book_name >> p->author_name >> p->classification_number >> p->publisher >> p->publish_date >> p->book_price;
复制代码
注意,上面的代码假设你的 book 类有如下的数据成员: login_number , book_name , author_name , classification_number , publisher , publish_date , book_price 。你需要根据你的 book 类的实际情况进行调整。
如果你的 book 类的 operator>> 重载是正确的,那么你应该可以直接使用 iss >> *p 。如果不行,你就需要检查你的 operator>> 实现,确保它能正确处理从空格分隔的字符串流中读取。
另外,你的 while 循环条件可能也需要修改。在 std::cin 发生错误(例如输入不是 'Y', 'y', 'N', 'n' 的字符)时,你需要清空缓冲区并忽略剩余的输入,然后再尝试读取。你可以尝试如下的循环:
- do {
- std::cin >> m;
- if (m != 'Y' && m != 'y' && m != 'N' && m != 'n') {
- std::cout << "输入错误,请重新输入:" << std::endl;
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- } while (m != 'Y' && m != 'y' && m != 'N' && m != 'n');
复制代码
在这个循环中,如果输入的不是 'Y', 'y', 'N', 'n' 中的一个,那么会清空输入流并忽略剩余的输入,然后提示用户重新输入。当输入正确时,循环才会结束。 |
|