11 / 46
Sep 2019

Zmieniłem warunek sprawdzania długości z && na ||, ale nadal dupa.

skoro mimo podpowiedzi nie znalazłeś błędu, to podpowiedź wysyłam jako prywatną - może jeszcze ktoś wpadnie w tę pułapkę :slight_smile: - jak już rozwiążesz problem, to usuń kod i nie chwal się co to było :slight_smile:

1 year later

Po wielu próbach niestety nie rozwiązałem zadania. Jeszcze coś gdzieś przeoczyłem, pomoże ktoś? Bo nie mam już kompletnie pomysłu co może być nie tak. Błąd "Błędna odpowiedź"
Kod

Edit:
Usunięcie kodu.

w treści:

  • login musi zawierać od 3 do 12 znaków, a hasło od 5 do 15

(hasło) to jest nieprawda w zadaniu są puste hasła, czyli login i brak hasła.
Jeżeli pobierasz dane cin >> login >> haslo to nie rozwiążesz zadania.

Ja miałem problem z tym zadaniem, zrobiłem getlinem sprawdzając czy są dwa wyrazy czy jeden i mam AC.

Test:

in:
register 2
jan HAslo12!@
kowalski
login 3
jan 123
jan HAslo12!@
kowalski HA12@wes

twój out:
Zarejestrowano
Blad

mój (AC) out:
Zarejestrowano
Blad
Zle haslo
Zalogowano
Konto nie istnieje

Udało mi się rozwiązać test powyżej jednak nadal wyskakuje błędna odpowiedź.
Kod:hide
Będę bardzo wdzięczny za inne ciekawe dane wejściowe :pray:

edit: usuniecie kodu.

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.

20 days later

Dziękuje wszystkim za pomoc. Dopiero dzisiaj udało mi się usiąść do tego zadania i je zrobić. Udało się, jeszcze raz dziękuje za pomoc.
Dokładnie jak pisze hipcia - trzeba dostosować się do kolejności w zadaniu.

BTW. W próbach sędziego nie ma pustego hasła :wink:

2 months later

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 :wink:

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ć.

Ty to wiesz, ja to wiem, ale chodziło mi tylko i wyłącznie o to, że na spoju jest już dostępny właśnie C++14, a nie C++11, 17 czy 20.

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?