Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Nadya

Sistema login

Recommended Posts

Nadya

Boas!

Estou aqui com uma pequena duvida, estou a fazer um projecto em que tenho que guardar num ficheiro os dados de login de um user, tipo username/password.

Para guardar tudo bem basta concatenar as strings com /.

E para le-las de novo? o username consigo assim : 

while(!file.eof()) {

file.getline(buffer,100);

user=strtok(buffer,"/");

}

E a password como faço?

Desculpem mas já estou ...  :wallbash:

Thanks

Share this post


Link to post
Share on other sites
pmg

   while(!file.eof()) {
      file.getline(buffer,100);
      user=strtok(buffer,"/");
      pass=strtok(NULL,"/"); /* apanha o "token" seguinte */
      }

Edit http://www.cplusplus.com/reference/clibrary/cstring/strtok.html

não te esqueças de validar o resultado dos strtok.

   while(!file.eof()) {
      file.getline(buffer,100);
      user=strtok(buffer,"/");
      if (user != NULL) {
         pass=strtok(NULL,"/"); /* apanha o "token" seguinte */
         if (pass != NULL) {
            /* faz o que tens a fazer */
         } else {
            /* erro?: password não encontrada */
         }
      } else {
         /* erro: impossível "tokenizar" o buffer */
      }
      }

Edit 2: Com o código de cima a password não pode ter o caracter "/".

Se quiseres que a password seja tudo desde o primeiro "/" até ao fim da linha, substitui o delimitador por nada

/*...*/
         pass=strtok(NULL,""); /* apanha o resto da linha */
/*...*/


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Nadya

Muito obrigada!!!

Já funciona, pensei que ao usar user=strtok(buffer,"/"); ao colocar NULL em vez de buffer ele nao iria ler nada!!

Thanks!!! 😳

Share this post


Link to post
Share on other sites
Nadya

Agora o problema é que quando inicializo char * user, o compilador dá bad ptr  :)

bool Sistema::checkLogin(string username_,string password_)
{
ifstream file;
char * user;
char * pass;
char buffer[100];
//converter as strings em char *
char * user_=stringToChar(username_);
char * pass_=stringToChar(password_);

file.open("utilizadores.txt");
if(file.is_open()){
while(!file.eof()) { 
	file.getline(buffer,100); 
	user=strtok(buffer,"/");     // char * strtok ( char * str, const char * delimiters );
	if (user != NULL) {        
		pass=strtok(NULL,"/"); /* apanha o "token" seguinte */    
		if (pass != NULL) { 
			if(strcmp(user,user_)==0 && strcmp(pass,pass_)==0){
				return true;		
			}else
				return false;
		}else return false;
	}else return false;
}
}else{addAdministrador("admin","admin","Administrador");}

file.close();
delete[] user_;  
delete[] pass_;
}

Peço desculpas se estou a fazer algo de muito estupido, mas estou a começar agora nisto.

Obrigada! 😳

Share this post


Link to post
Share on other sites
pmg

O que é que a função stringToChar faz?

Suponho que essa função cria um espaço de memória para converter a std::string num char[].

Isso está a ser bem feito?

Um ponto relativo ao teu código: há alturas em que não fazes o file.close nem o delete[] porque passas por um return (fora do sítio).

Outra coisa: não há maneira de fazeres o que queres sem teres de usar char*, somente com coisas da biblioteca do C++ -- eu não sei C++ suficiente para me responder :)

Tás a misturar muito C com C++ (se calhar não há outra maneira)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Nadya

entao usando só c++

Para colocar dentro de um ficheiro in_file<<nome<<username<<password.

e dentro do ficheiro irá aparecer alfo do genero administradoradminadmin.

Se eu depois fizer in_file>>nome>>username>>password existe alguma forma de ele ler os dados? sem ser da forma como estou a fazer?

O que fiz foi gravar os utilizadores dentro de um ficheiro tipo administrador/admin/admin, depois para ler e verificar desconcateno e verifico ...

Devo estar a fazer algo muito estupido não?

Share this post


Link to post
Share on other sites
pmg

A std::string tem muitas funções que deve ser possível usar para o que queres

http://www.cplusplus.com/reference/string/string/

http://www.cplusplus.com/reference/string/string/find.html

É claro que tens que delimitar o nome/username/password com alguma coisa!

Ao leres o ficheiro, deve ser possível converter para as variáveis isoladas usando as funções do std::string.

E não precisas de andar com char*, new[] e delete[] para trás e para a frente.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Nadya

Tinhas razao!

agora trabalhei só com strings e é muito mais facil  😳

bool Sistema::checkLogin(string username_,string password_)
{
string user, pass;
ifstream file;
file.open("utilizadores.txt");
if(file.is_open())
{
	file >> user >> pass;
	if(user==username_){
		if (pass==password_)
			return true;	
	}
return false;
}else{addAdministrador("admin","admin");}

file.close();
}

Thanks  :)

Share this post


Link to post
Share on other sites
Nadya

EDIT : Problema resolvido ... o if estava mal feito  :wallbash:

-----------------------------------

Desculpem voltar a chatear ... mas so agora voltei a pegar no projecto ... este codigo que fiz só lê uma linha de do ficheiro ... como posso resolver? Como faço para ele pesquisar linha a linha?

Obrigado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.