sprawdzanie poprawności hasła z pliku *.txt
Ostatnio zmodyfikowano 2013-12-21 17:40
Masterpc16 Temat założony przez niniejszego użytkownika |
sprawdzanie poprawności hasła z pliku *.txt » 2013-12-20 19:03:41 Witajcie mam taki problem programuje w dev c++ i chciałem zrobić program do logowania i zakładania kont. Dane do konta są eksportowane do pliku txt który się nazywa tak samo jaki jest login użytkownika. Wszystko działa oprócz logowania gdy program sprawdza poprawność haseł to się zacina używam tam "!=" a gdy użyję "==" to działa tylko że na odwrót poniżej zamieszczam cały kod oraz linijki w którym występuje ten problem #include <iostream> #include <string> #include <fstream> using namespace std; int main() { string odpowiedz, login, haslo, rehaslo, mail, haslo1, login1; cout << "Witamy w systemie. Czy posiadasz u nas konto?: "; cin >> odpowiedz; if( odpowiedz == "nie" || odpowiedz == "Nie" || odpowiedz == "NIE" || odpowiedz == "NiE" || odpowiedz == "NIe" || odpowiedz == "nIE" || odpowiedz == "nIe" || odpowiedz == "niE" ) { cout << "Podaj login: "; cin >> login; if( ifstream( login.c_str() ) ) { cout << "Masz juz konto w serwisie." << endl; } else { cout << "Podaj adres e-mail: "; cin >> mail; if(( mail.find( '@' ) == string::npos ) ||(( mail.find( '.' ) ) == string::npos ) ) { while(( mail.find( '@' ) ) == string::npos ||( mail.find( '.' ) ) == string::npos ) { cout << "Podales zly adres mail! Podaj go jeszcze raz "; cin >> mail; } } cout << "Podaj haslo: "; cin >> haslo; cout << "Podaj ponownie haslo: "; cin >> rehaslo; while( haslo != rehaslo ) { cout << "Cos poszczlo nie tak :( podaj jeszcze raz haslo: "; cin >> haslo; cout << "Podaj jeszcze raz haslo dla poprawnej weryfikacji: "; cin >> rehaslo; } ofstream dane( login.c_str() ); dane << login << endl; dane << haslo << endl; dane << mail << endl; dane.close(); cout << "Dziekujemy wlasnie zalozyles konto w naszym serwisie" << endl; } } else { ifstream dane( login.c_str() ); getline( dane, login ); getline( dane, haslo ); dane.close(); cout << "Podaj login: "; cin >> login1; cout << "Podaj haslo: "; cin >> haslo1; while( haslo1 != haslo || login1 != login ); { cout << "Wprowadziles bledne haslo lub login. Podaj jeszcze raz login: "; cin >> login1; cout << "Podaj haslo: "; cin >> haslo1; } cout << "Poprawnie sie zalogowales." << endl; } getchar(); return 0; } ifstream dane( login.c_str() ); getline( dane, login ); getline( dane, haslo ); dane.close(); cout << "Podaj login: "; cin >> login1; cout << "Podaj haslo: "; cin >> haslo1; while( haslo1 != haslo || login1 != login );
{ cout << "Wprowadziles bledne haslo lub login. Podaj jeszcze raz login: "; cin >> login1; cout << "Podaj haslo: "; cin >> haslo1; } cout << "Poprawnie sie zalogowales." << endl; |
|
kubawal |
» 2013-12-20 19:19:07 ifstream dane( login.c_str() );
| login nie jest inicjowany przy logowaniu, więc ścieżka jest pusta i nie sprawdzasz, czy taki plik istnieje. |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2013-12-20 19:20:45 Czyli wystarczy że sprawdzę czy ten plik istnieje?? |
|
kubawal |
» 2013-12-20 19:28:22 On na pewno nie będzie istniał, bo otwierasz go z pustego łańcucha("") |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2013-12-20 19:43:07 Jednak dalej mi to nie działa :( oto kawałek kodu { logowanie: system( "cls" ); cout << "Witamy w kreatorze logowania" << endl; ifstream dane( login.c_str() ); getline( dane, login ); getline( dane, haslo ); dane.close(); podajlogin: cout << "Podaj login: "; cin >> login1; if( !ifstream( login1.c_str() ) ) { cout << "Nie masz zarejestrowanego konta. Czy przejsc do kreatora rejestracji? " << endl; cin >> odp2; if( odpowiedz == "tak" || odpowiedz == "Tak" || odpowiedz == "TAK" || odpowiedz == "TaK" || odpowiedz == "TAk" || odpowiedz == "tAK" || odpowiedz == "tAk" || odpowiedz == "taK" ) { goto rejestracja; } else { goto podajlogin; } } cout << "Podaj haslo: "; cin >> haslo1; while( haslo1 != haslo || login1 != login ); { cout << "Wprowadziles bledne haslo lub login. Czy chcesz sie zarejestrowac? "; cin >> odp; if( odpowiedz == "tak" || odpowiedz == "Tak" || odpowiedz == "TAK" || odpowiedz == "TaK" || odpowiedz == "TAk" || odpowiedz == "tAK" || odpowiedz == "tAk" || odpowiedz == "taK" ) { goto rejestracja; } else { cout << "Podaj jeszcze raz login: "; cin >> login1; cout << "Podaj haslo: "; cin >> haslo1; } } cout << "Poprawnie sie zalogowales." << endl; }
system( "PAUSE" ); return 0; } dodam że sprawdzam to na utworzonym pliku txt |
|
RazzorFlame |
» 2013-12-21 15:31:06 Użycie "goto" jest tutaj conajmniej nie potrzebne, a poza tym ciekawe rozwiązanie (ciekawe != wystarczająco dobre) if( odpowiedz == "tak" || odpowiedz == "Tak" || odpowiedz == "TAK" || odpowiedz == "TaK" || odpowiedz == "TAk" || odpowiedz == "tAK" || odpowiedz == "tAk" || odpowiedz == "taK" ) Wystarczy że użyjesz funkcji std::tolower() która zamienia wszystkie wielkie litery na małe. Wtedy wystarczy że sprawdzisz czy `odpowiedz == "tak"` lub `odpowiedz == "nie"`. |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2013-12-21 17:40:22 |
|
« 1 » |