@pwlnet17 mylisz się.
Login musi zawierać od 3 do 12 znaków:
if (lo.length() <= 3 && lo.length() >= 12) { // błędny warunek
Musisz dostosować się do kolejności podanej w zadaniu. W przypadku rejestracji gdy podany zostanie zajęty login i błędne hasło musisz wypisać “Blad”, a nie “Login zajety”.
PS. Spróbuj skrócić trochę kod i rozdziel warstwę logiki od operacji IO.
Proszę o podpowiedź dotyczącą tego zadania, już naprawdę mam mam dosyć a jestem zbyt uparty żeby sobie odpuścić. Mój kod https://pastebin.com/hEccTrmB20 oraz jeszcze zapytam czy tu może być problem z podawaniem wartości przez cin?
cout << "register ";
cin >> registerAttemps;
Na wejściu pojawi się nieokreślona liczba zestawów zawierająca słowa register/login - dlatego powinieneś wczytać stringa i wykonać podaną operację:
int attempts;
std::string command;
while (std::cin >> command >> attempts) {
if (command == "register") {/*register*/}
else if (command == "login") {/*login*/}
}
W funkcji main masz zdublowany fragment kodu. To wszystko
Nie rozumiem pytania - cin służy do wczytywania.
Problem polega między innymi na tym, że twoje rozwiązanie nie jest poprawne nawet dla testów przykładowych z zadania, więc będzie WA.
I tu pytanie, czy Ty testujesz swoje rozwiązanie i jeżeli tak to jak?
Można testować u siebie, albo na ideone.com6 - po wklejeniu przykładowego wejścia z zadania lub swojego/innego testu do okienka stdin : https://ideone.com/LE9LpC7 [podałeś błędny - nie kompilujący się kod, poprawiłem go, tylko tak aby się kompilował].
W twoim programie, wszystkie cout << "login...., cout << "register ...
. są zbędne i są błędem. Wczytywanie danych też masz błędne.
Poprawnie możesz tak jak zaproponował @hipcia:
int main () {
// deklaracja potrzebnych zmiennych -
while (cin >> command >> attemps) {//powtarzaj, dopóki są jeszcze dane do wczytania
if (command == "register") {
//twój kod obsługujący rejestrację powtórony attemps razy
}
else {
// twój kod obsługujący logowanie powtórzony attemps razy
}
}
PS
Jeżeli wzorujesz się na stylu Stańczyka, to jego książka nie jest do nauki języka C++, a dodatkowo jest już nieco przestarzała.
Makra w C++ to spadek po języku C, i w C++14 np.: zamiast makra FOREACH:
FOREACH(it, account){
cout << it->first << " " << it->second << "\n";
}
można i jest to dużo lepiej:
for (auto i : account)
cout << i.first << ' ' << i.second << '\n';
itd.
@narbej Range-based for pojawił się w C++11. Dodałbym również referencję do deklaracji typu, ponieważ std::pair
nie można trywialnie kopiować.
Testuje swoje rozwiązania w cmd w visual studio code przy użyciu komendy a.exe, natomiast nie wiem jak dokładnie działa sędzia na spoju. Ten link który mi podałeś https://ideone.com/LE9LpC8 to w stdout sędzia otrzymuje takie wyjście?