minilogowanie w c++

0

Tworzę minilogowanie w c++. Pojawił się problem. Po 3-krotnym wpisaniu błędnego hasła, odczekaniu 3 sekund i próbie wpisania ponownie tym razem prawidłowego, wypisuje komunikat 'błędne hasło'. Z góry dziękuję za pomoc.

#include<iostream>
#include<conio.h>
#include<windows.h>

using namespace std;

int main()
{
    string haslo, prawidlowe_haslo="admin";

    int proby=3;
    char znak, pytanie;

    do
    {
        system("cls");
        do
        {
            cout<<"Wprowadz haslo: ";
            while ((znak=_getch()) != '\r')
            {
                cout<<"*";
                haslo+=znak;
            }

            if (haslo!=prawidlowe_haslo)
            {
                proby -= 1;
                cout<<endl<<"Pozostalo "<<proby<<" prob"<<endl<<endl;
            }
        }
        while (proby>0 && haslo!=prawidlowe_haslo);

        if (proby==0)
        {
            for (int i=3;i>=0;--i)
            {
                Sleep(1000);
                system("cls");
                cout<<"Dostep zablokowany! Musisz poczekac "<<i<<" sekund przed kolejna proba"<<endl;
            }
            proby=3;
            cout<<"Czy chcesz sprobowac ponownie? (t/n): ";
            cin>>pytanie;
            if (pytanie == 't' || 'T') continue;
        }
        else
        {
            cout<<endl<<"prawidlowe haslo! \n";
            break;
        }
    }
    while (pytanie == 't' || 'T');
    return 0;
}
1
  1. Nie pytanie == 't' || 'T' tylko pytanie == 't' || pytanie == 'T'
  2. Po co Ci to: while (pytanie == 't' || 'T');? :|
0

Żeby po 3 błędnych wyświetliło znowu 'wprowadz haslo'.

1

Ale co to ma do rzeczy?
Wyobraź sobie, że user wpisuje na samym początku prawidłowe hasło i prześledź sobie wtedy swój kod linijka po linijce - patrząc, jaką wartość osiągnie zmienna pytanie.

0

Gdy user wpisuje na samym początku prawidłowe hasło, to nie ma problemu, program działa i wykonuje się dalej. Co trzeba zmienić, aby po pierwszym wpisaniu błędnego hasła, kolejne (prawidłowo wpisane) akceptowało? Może jakiś inny sposób powrotu na początek ('podaj haslo')? (tylko nie goto)

2

Nie - pytam: jaką wartość ma zmienna pytanie, jeśli użytkownik na początku wpisze dobre hasło? :P
Próbuję Ci wskazać jeden z błędów w Twoim kodzie.

0

Nie określiłem jej wartości w przypadku prawidłowego wpisania hasła, bo pętla ma się wykonywać w przypadku błędnej serii prób hasła.

0

Przecież ta pętla wykona się także w przypadku podania prawidłowego hasła.
Przeanalizuj sobie ręcznie ten kod linijka po linijce, gdy user podaje prawidłowe hasło :P

0
while (pytanie == 't' || 'T') 

to nie to samo co:

while (pytanie == 't' || pytanie == 'T')

W pierwszym przypadku warunek jest zawsze spełniony.

0

powinienem nadać jakąś wartość zmiennej 'pytanie' w przypadku wprowadzenia prawidlowego hasla?

0

W drugą stronę: powinieneś nadać jej na początku programu jakąś domyślną wartość, np.: '\0' albo jakieś 'x'.

1 użytkowników online, w tym zalogowanych: 0, gości: 1