Может кто-нибудь объяснить мне, почему это не делает то, что я хочу? Я хочу, чтобы пользователь мог ввести не менее 5 элементов, однако я хочу убедиться, что все элементы являются уникальными. Когда они вводят название предмета, я хочу, чтобы он впоследствии (проверил, что там нет другого предмета с таким именем). У меня есть (ранжированный на основе l oop), который перебирает вектор, однако, когда я вставляю два одинаковых, он не возвращает l oop к началу, он просто продолжается, и по какой-то причине только проверяет и перебирает вектор один раз. Может кто-нибудь помочь мне? Я работал часами, пытаясь решить эту проблему.
bool Items::CheckIfItemExists(std::string &sInputName)
{
for(const auto &Item : ItemsVec)
{
if (Item.GetItemName() == sInputName)
{
std::cout << "Item failed to add as there is already an item called that.\n";
std::cin.clear();
return false;
}
}
return true;
}
void Items::AddNewItem()
{
bool bValid = false;
std::string sInputName;
double dInputSalePrice = 0;
int iInputQuantity = 0;
do{
std::cout << "Enter information for new item...\n";
std::cout << "\tName: ";
std::cin.ignore();
std::cin.clear();
std::getline(std::cin,sInputName);
bValid = CheckIfItemExists(sInputName);
}while(bValid == false);
bool bSalePriceValid = false;
do{
std::cout << "\tSale price: £";
std::cin >> dInputSalePrice;
if(!std::cin)
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
std::cout << "\n";
std::cout << "Sorry, invalid input input. Try again!\n";
std::cout << "\n";
}
else
{
bSalePriceValid = true;
}
}while(bSalePriceValid == false);
bool bQuantityValid = false;
do{
std::cout << "\tQuantity sold: ";
std::cin >> iInputQuantity;
if(!std::cin)
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
std::cout << "\n";
std::cout << "Sorry, invalid input input. Try again!\n";
std::cout << "\n";
}
else
{
bQuantityValid = true;
}
}while(bQuantityValid == false);
Item NewItem(sInputName, dInputSalePrice, iInputQuantity);
ItemsVec.push_back(NewItem);
std::cout << "You've succesfully added a new item.\n";
}