[C++] odrzucanie hasla wczytywanego z pliku

Witam, mam taki problem. Zastosowalem w kodzie na autoryzacje cos takiego, ze najpierw wczytuje z pliku tekstowego haslo i przypisuje je do stringu actualpassadmin, a dalej, gdy jest autoryzacja, to jest cos takiego:

if (actpassadmin == password)

(dodam, ze password ma wartosc ktora wprowadzi uzytkownik)

i po uruchomieniu programu i wprowadzeniu przeze mnie hasla, ktore jest w pliku, pokazuje, ze bledne haslo, a oto czesci programu odpowiedzialne za to

void beginreading ()

{


string actadminpass;

    ifstream pilik("C:\\Dev-Cpp1\\apassword.txt");

    if(pilik) {



             while( getline(pilik,actadminpass))

             {


             }


             }else{


                     cout << "Blad pliku."<< endl ;


                     actadminpass = actualpassadmin;



                   }

                   // ****

                   string actmodpass;

                   ifstream pilnik("C:\\Dev-Cpp1\\mpassword.txt");

    if(pilnik) {



             while( getline(pilnik,actmodpass))

             {


             }


             }else{


                     cout << "Blad pliku."<< endl ;


                     actmodpass = actualpassmod;

                   }

                   //***

                          string actemplpass;

                   ifstream enpilike("C:\\Dev-Cpp1\\epassword.txt");

    if(enpilike) {



             while( getline(enpilike,actemplpass))

             {


             }


             }else{


                     cout << "Blad pliku."<< endl ;


                     actemplpass = actualpassempl;

                   }

                   }


Wczytuje hasla dla poszczegolnych grup

int main ()

{

    beginreading(); / wczytanie hasel z pliku

    string priority;

    string password;


    cout << "Type your group name:\t";

    cin >> priority;


    if (priority == "admin")

    {



                 cout << "Type password for administrator priority:\t";

                 cin >> password;

                 if (password == actualpassadmin)

                 {

                 cout << "That's actual Friends Database" << __DATE__ ;


                 reading();


                 tasks();





                 }


                              else

                              cout << "Sorry, this is not administrator funcion password. Remember, impersonateing any of Salazaar Software employee is a crime and could be wanting by police.";

     }

     if (priority == "moderator")

     {



                  cout << "Type password for moderator priority:\t";

                  cin >> password;

                  if (password == actualpassmod)

                  {

                                cout << "That's actual Friends Database" << __DATE__ ;


                 reading();


                 modtasks();

                               }



                              else

                              cout << "Sorry, this is not moderator funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";

                              }

                        if (priority == "employee")

                        {

                              cout << "Type password for employee priority:\t";

                  cin >> password;


                  if (password == actualpassempl)

                  {

                                cout << "That's actual Friends Database" << __DATE__ ;


                 reading();


                 empltasks();

                               }   

                              else

                              cout << "Sorry, this is not employee funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";

                              }       

    if ( (priority != "admin") && (priority != "moderator") && (priority != "employee") )

    cout << "There's no " << priority << " priority";


    cin.ignore();

              cin.get();

    return 0;

              system("pause");


}

A oto glowna czesc programu

Co jest zle, jak wpisuje poprawne haslo to mi je odrzuca/

jezeli dobrze pamietam niemozna porownywac 2 stringow, do tego masz funkcje albo przelduj operator ==

http://www.cplusplus.com/reference/clib … trcmp.html

http://4programmers.net/C/Strcmp

Jesli by nie bylo mozna to by mi wywalilo blad, a w sumfonii pisza, ze mozna przypisywac. Wiec co jest zle?

Złączono Posta : 31.03.2007 (Sob) 15:29

A jak probuje bezposrednio porownaniem (actpassadmin == password)

to mi wywala ze actpassadmin undeclared. Ja juz nie mam na to sil…

Złączono Posta : 31.03.2007 (Sob) 15:32

dobra, z tym undeclared sobie poradzilem, wiec jak robie to porownanie

(actpassadmin == password)

to tez mimo poprawnie wpisanego hasla odrzuca mi mowiac, ze nie wlasciwe haslo. Dlaczego??

Złączono Posta : 31.03.2007 (Sob) 16:11

n

apisalem taki krotki programik testowy

#include 

#include 

#include 


using namespace std;


void funkcja() {

    string napis;


    ifstream plik("C:\\Dev-Cpp1\\apassword.txt");

    if(plik) {



             while( getline(plik,napis))

             {

                 cout << napis << endl ;

             }


             }else{


                     cout << "Blad pliku."<< endl ;

                   }



             }

             int main()

             {

                 funkcja();

                 string pass;

                 string napis;

                 cout << "Type pass:\t";

                 cin >> pass;

                 if (pass == napis)

                 cout << "Hehe";

                 else

                 cout << "■■■■";




    return 0;

              system("pause");

                 }

Jak widzimy, najpierw wyswietlane jest haslo (pobrane z pliku), potem wpisywane jest haslo przeze mnie (wpisalem to, ktore jest w pliku) i nastepuje porownanie. Jesli wpisane przeze mnie haslo rowna sie temu co bylo wyswietlone z pliku to powinno sie pojawic “hehe”. Jesli sie nie rowna, to pojawia sie “■■■■” Ja wpisalem poprawnie, wiec powinno sie pojawic “hehe”. Dlaczego tak sie nie dzieje?

Proponuje na przyszłość używać znaczników CODE. Lazikar

Bzdura! Poprawność składni a poprawność działania to dwie różne rzeczy. Pisałem Ci już, że porównywanie char* porównuje wskaźniki a nie treść ciągu, ale Ty nie czytasz nawet odpowiedzi ze zrozumieniem.

Wklejaj kod w tagi CODE następnym razem, ok? Nie da się tego czytać.

Ale dlaczego to nei dziala?

Wklej kod opatrując do w [code] to odpowiem na to pytanie.

#include 

#include 

#include 


using namespace std; 


void funkcja() { 

string napis; 


ifstream plik("C:\\Dev-Cpp1\\apassword.txt"); 

if(plik) { 



while( getline(plik,napis)) 

{ 

cout << napis << endl ; 

} 


}else{ 


cout << "Blad pliku."<< endl ; 

} 



} 

int main() 

{ 

funkcja(); 

string pass; 

string napis; 

cout << "Type pass:\t"; 

cin >> pass; 

if (pass == napis) 

cout << "Hehe"; 

else 

cout << "■■■■"; 




return 0; 

system("pause"); 

}

Poczytaj o lokalności zmiennych. Zmienna napis wewnątrz funkcja() to inna zmienna od tej o nazwie napis wewnątrz main(). Zmienna napis w funkcja() a więc i jej wartość istnieje od { do } otaczających kod funkcji. Jeśli apassword ma tylko jeden wpis - możesz to hasło zwrócić z funkcji z zmiennej w main, tak jak tutaj:

string funkcja()

{

  string s = "slowo";

  return s;

}

void main(void)

{

string s = funkcja();

cout << s;

}

Przeczytaj ze zrozumieniem rozdział o zmiennych w książce. Zaoszczędzisz sobie czasu na zadawanie pytań. Serio.

sory, to stary kod, w nowym umiescilem definicje stringow przed jakakolwiek funkcja tak, ze sa globalne. tez nie dziala, co jest zle?

W kodzie powyżej - to co napisałem jest źle. W innym kodzie - musiałbym go zobaczyć, żeby powiedzieć co jest źle. W kodzie powyżej używasz niezadeklarowanej zmiennej:

string pass; // <<<<<<<< TA ZMIENNA NIE MA WARTOŚCI

string napis; // <<<<<<<< TA ZMIENNA NIE MA WARTOŚCI

cin >> pass; // <<<<<<<< pass JUŻ MA WARTOŚĆ

if (pass == napis) // <<<<<<<< BŁĄD!

Błąd polega na tym, że porównuje zmienną niezainicjowaną (napis) z jakimś ciągiem znaków (pass). Napisałem to wyraźnie w poprzednim poście i ponownie powtarzam.

napsi ma wartość. Patrz na to:

string napis;


ifstream plik("C:\\Dev-Cpp1\\apassword.txt");

if(plik) {



while( getline(plik,napis))

{

cout << napis << endl ;

}


}else{


cout << "Blad pliku."<< endl ;

}

A w poprzednim string napis, pass miało być na początku jako zmienne globalne. Poprawiłem, to ni nadal kicha

Poczytaj o lokalności zmiennes - napis w main i napis w funkcji to dwie różne zmienne.

Zmienna napis w main nie ma przypisanej wartości. Wiem, że bardzo byś chciał, żeby miała,

ale nie ma. Podałem Ci nawet co zrobić, żeby miała. Jakkolwiek byś zaklinał swój

program - nic się nie stanie póki a) nie zrozumiesz problemu b) nie poprawisz go.

wlasciwie to my caly czas pracowalismy na innnym kodzie, ale juz zrozumialem w czym problem, chodzilo o ta petle while bo 2 wczytani zamazalo 1