Мой код — это Магазин, который я пытаюсь создать, он работает (Зарегистрируйте работающую систему), пока я не введу свой Пользователь и Пароль (Систему входа), после ввода моего имени пользователя, программа попросит меня повторно войти в систему, и она продолжает делать это ( Я уверен, что это правда, потому что это пока верный цикл).
(Это проект, поэтому есть отдельные файлы с конструкторами и классами.)
Вот часть моего Кодекса:
while(true)
{
cout << "Would you like to register or login?" << endl;
string answer = "";
cin >> answer;
if(answer == "register" || answer == "Register")
{
cout << "What would be your designated username?: " << endl;
string newUser;
cin >> newUser;
for(int i = 0; i < 20; i++)
{
if(customers[i] -> username != newUser)
{
cout << "what would be your designated password?: " << endl;
string newPass;
cin >> newPass;
customers[lastRegisteredID] = new Customer(newUser, newPass);
lastRegisteredID++;
break;
}
}
//^Register Part.
}
if(answer == "login" || answer == "Login")
{
cout << "Your username: " << endl;
string UserAttempt;
cin >> UserAttempt;
for(int j = 0; j < 20; j++)
{
if(customers[j] -> username == UserAttempt)
{
cout << "Username Found!" << endl;
tempCustomer = customers[j];
cout << "Your password: " << endl;
string PassAtempt;
cin >> PassAtempt;
if(tempCustomer -> password == PassAtempt)
{
cout << "Password correct \n Successfully logged in." << endl;
loggedin = true;
break;
}
}
}
}
//^Login part.
}
Проблема, о которой вы спрашиваете, проистекает (как уже говорилось в комментариях к вашему вопросу) из того факта, что ваш break;
только выводит вас из цикла for (самый внутренний цикл), а не цикла while. Самый простой способ исправить это — заменить while(true)
с while(!loggedin)
, Также обратите внимание, что в опубликованном вами коде есть и другие проблемы. Поскольку я не знаю, есть ли эти ошибки в вашем окончательном коде, я перечислю их только (те немногие, что я нашел):
Вы не выходите из себя while
цикл после выполнения успешного login
операция.
Кроме того, ваш код падает, если зарегистрировано менее 20 клиентов.
Кроме того, ваш код позволяет нескольким пользователям регистрироваться, используя одно и то же имя пользователя и даже один и тот же пароль.
Попробуйте что-то более похожее на это:
Customer* customers[20];
int numCustomers = 0;
bool loggedin = false;
Customer* findCustomer(const std::string &user)
{
for(int i = 0; i < numCustomers; ++i)
{
if (customers[i]->username == user)
return customers[i];
}
return NULL;
}
...
while (true)
{
std::cout << "Would you like to register or login?" << std::endl;
std::string answer;
std::cin >> answer;
std::transform(answer.begin(), answer.end(), ::tolower);
if (answer == "register")
{
std::cout << "What would be your designated username?: " << std::endl;
string newUser;
std::cin >> newUser;
Customer *cust = findCustomer(newUser);
if (cust)
{
std::cout << "That username is already taken!" << endl;
continue;
}
if (numCustomers >= 20)
{
std::cout << "Too many users are registered!" << endl;
continue;
}
std::cout << "what would be your designated password?: " << std::endl;
std::string newPass;
std::cin >> newPass;
customers[numCustomers] = new Customer(newUser, newPass);
++numCustomers;
continue;
}
if (answer == "login")
{
std::cout << "Your username: " << std::endl;
std::string UserAttempt;
std::cin >> UserAttempt;
std::cout << "Your password: " << std::endl;
std::string PassAttempt;
std::cin >> PassAttempt;
Customer *cust = findCustomer(UserAttempt);
if ((cust) && (cust->password == PassAttempt))
{
std::cout << "Successfully logged in" << std::endl;
loggedin = true;
break;
}
std::cout << "Not logged in!" << std::endl;
continue;
}
std::cout << "Unknown command! Try again" << std::endl;
}