Jump to content
Sign in to follow this  
odracir

Programa de login

Recommended Posts

odracir

Olá

Tenho andado a trabalhar neste sistema de login e tenho isto contudo não consigo encontrar o erro ele parece que não está a verificar e eu não percebo porque.

#include<iostream>
#include <fstream>
#include<stdlib.h>
#include<fstream>
#include<string>
#include<conio.h>
using namespace std;

int dados_utilizador(char *username,char *password);/*Recebe dados para nova conta*/
int compara();/*Coloca dados no sistem*/
int verifica();/*verifica se a conta digitada para login existe*/
char menu(char *username2,char *password2);/*menu principal, para login e crianção da conta*/
char username[21],password[21],username2[21],password2[21];
int main(){
           
           menu(username2,password2);
           }
char menu(char *username2,char *password2){
           int n;
           cout<<"============Welcome to math chalanges============\n\n";/*Menu principal*/
           cout<<"Are you registered ?\n";
           cout<<"1-Yes\n";
           cout<<"2-No\n";
           cin>>n;
           if(n==1){
                    cout<<"Good job\n";
                    cout<<"Please login\n";
                    cout<<"Username\n";
                    cin>>username2;
                    cout<<"Password\n";
                    cin>>password2;
                    verifica();/*O erro é aqui*/                   
                   
                    
                    }
           else{
               dados_utilizador(username,password);
               } 
           system("Pause");
           }
int dados_utilizador(char *username,char *password){/*Algoritmo para criação de conta*/
                       cout<<"Choose a username and a password\n";
                       
                       
                       cout<<"Write your username (use no more that 21 letters or numbers)\n";
                       cin>>username;
                       
                       cout<<"\nWrite your password\n";
                       cin>>password;
                       compara();
                       }
int compara(){
              ofstream makefile;/*Cria ficheiro para colocação de dados*/
              
              makefile.open("Registation.txt", ios::app);
              makefile <<username<<" "<<password<<std::endl<<"\n"; 
              makefile.close();
              }
int verifica(){
               
              
               ifstream makefile;/*Abre o ficheiro para verificação de conta*/
               makefile.open("Registation.txt");
               string temp; 
               while(makefile>>temp){
                                   if(temp == username2){
                                                          makefile>>temp;
                                                          if(temp == password2){
                                                                                     break;
                                                                                     cout<<"Well done";
           }
      }
}
cout<<"erro";
               
               }

                                   

                                   

Obrigado e boa programação

Share this post


Link to post
Share on other sites
odracir

Encontrei um erro que não consigo resolver o programa não percorre o ficheiro, so vai buscar a primeira linha

Share this post


Link to post
Share on other sites
pikax

Encontrei um erro que não consigo resolver o programa não percorre o ficheiro, só vai buscar a primeira linha

Manda a função... função que tens em cima funciona no meu, se tirares o break


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
KTachyon

Tens a certeza que só lê a primeira linha, ou é porque estás a comparar strings com ==?

EDIT 2: Estás a comparar um objecto string com um array de chars, isso não dá com ==.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
KTachyon

Neps, tens razão, a operação existe. Deverá funcionar sem problemas. Esquece o que eu disse ;)

Como o pikax disse, tens lá um break que impede de fazer o output do "Well done!", ou seja, deves colocar o break depois do cout. Ele vai sair do loop e imprimir "erro", que penso que também não é tua intenção. Deves colocar uma flag que te indique se o login foi encontrado e está correcto.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
odracir

Não tu tens razão a função assim compara os índices dos strings tenho que por  if(!strcmp(username, username2))

muito obrigado pela ajuda

Share this post


Link to post
Share on other sites
KTachyon

Ao que parece eles estão definidos:

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


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
pikax

Ao que parece eles estão definidos:

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

pois parece que estão, eu quando testei, só retirei a parte do código que lia o ficheiro, e criei as 2 variáveis string "user" e "pw".

Eu normalmente não comparo string com char, mas pelo o que está na documentação, parece que ele compara com o operador=.

Só acho esquisito o system("pause") 😲 Já não o uso à N de tempo... btw podes substituir por um ou 2 getchar(), não me lembro se o ENTER fica guardado no buffer como em C  🤔


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
odracir

Eu não uso o getchar porque é uma função que tem como objectivo guardar o input do utilizador

Share this post


Link to post
Share on other sites
KTachyon

Eu normalmente não comparo string com char, mas pelo o que está na documentação, parece que ele compara com o operador=.

Neps, o = é para atribuições, como sempre foi, e está lá, também:

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


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
pikax

Neps, o = é para atribuições, como sempre foi, e está lá, também:

Esqueci-me de por mais um "="  era "==" 😳


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

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
Sign in to follow this  

×
×
  • Create New...

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.