Foros del Web » Programación para mayores de 30 ;) » C/C++ »

una entrar unos datoss y comparar con txt..

Estas en el tema de una entrar unos datoss y comparar con txt.. en el foro de C/C++ en Foros del Web. hola escribo haber si me pueden solucionar lo siguiente ya que soy muy novato en programación Seguramente estarán hartos de novatos que piden el mismo ...
  #1 (permalink)  
Antiguo 24/06/2011, 10:29
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
una entrar unos datoss y comparar con txt..

hola escribo haber si me pueden solucionar lo siguiente ya que soy muy novato en programación

Seguramente estarán hartos de novatos que piden el mismo programa. Estoy intentando hacer un programa en el que hay dos opciones una entrar y la otra registro ( cmo un login). En la opcion de registro pide el user y el pass y lo guarda en un txt. Hasta aqui funciona.

Lo que quiero hacer ahora es que en el menu de entrar yo pueda introducir el user y el pass y compare lo que he entrado con lo guardado en el text y en el caso que coincidan validar.

les dejo el código de lo q seria el menu y de la aplicacion del login ( lo he hecho en dos programas)

utilizo dev c++ y c++

menu

#include <iostream>
#include <fstream>


using namespace std;


int main(){
system("color 1E");
menu:
cout<<"1-Entrar"<<endl;
cout<<"2-Registrarse"<<endl;
int opt;
cin>>opt;
system("cls");


switch(opt){

case 1:{ system("jk");}

case 2:{

char usuario[10];
char pass[10];
registro:
ofstream fs("reg.txt", ios::app);
cout<<"Introduce nombre de usuario:";
cin>>usuario;
cout<<endl;
cout<<"Introduce el pass:";
cin>>pass;
fs<<usuario<<"\n";
fs<<pass;
fs.close();

ifstream fe("reg.txt");

system("cls");
cout<<"Usuario:"<<usuario<<endl;
fe.getline(usuario,10);
cout<<"\n";
cout<<"Pass:"<<pass<<endl;
fe.getline(pass,10);
cout<<"\n";
cout<<"Datos correctos?s/n"<<endl;
string resp;
cin>>resp;
if(resp=="s"){system("cls"); goto menu;}
if(resp=="n") {goto registro;}
else{exit(0);}
system("cls");


}
}
}






jk (programa de login)

#include <iostream>
#include<fstream>
using namespace std;

int main()
{

login:
char usuario[10],pass[10] ;
cout<<"User:";
cin.getline(usuario,10);
cout<<"\n";
cout<<"Pass:";
cin.getline(pass,10);

cout<<"Comprovando"<<endl;

ifstream fe("reg.txt");
fe.getline(usuario,10);
fe.getline(pass,10);
system("cls");

if(cin.getline(usuario,10)==fe.getline(usuario,10) and cin.getline(pass,10)==fe.getline(pass,10)){
cout<<"Login correcto"<<usuario<<endl;
system("toperativ");}
else{cout<<"Login incorrecto"<<endl;
system("pause");
system("cls");
goto login;}

}



el codigo de registar funciona, lo que no consigo lograr es lo de entar los datos en el login y que los compare con el txt y si son correctos valide


muchas gracias
PD: perdón por tal idea de nob
  #2 (permalink)  
Antiguo 24/06/2011, 10:51
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: una entrar unos datoss y comparar con txt..

Código C++:
Ver original
  1. //jk (programa de login)
  2.  
  3. #include <iostream>
  4. #include<fstream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  
  10. login:
  11. char usuario[10],pass[10] ;
  12. cout<<"User:";
  13. cin.getline(usuario,10);
  14. cout<<"\n";
  15. cout<<"Pass:";
  16. cin.getline(pass,10);
  17.  
  18. cout<<"Comprovando"<<endl;
  19.  
  20. ifstream fe("reg.txt");
  21. fe.getline(usuario,10);
  22. fe.getline(pass,10);
  23. system("cls");
  24.  
  25. if(cin.getline(usuario,10)==fe.getline(usuario,10) and cin.getline(pass,10)==fe.getline(pass,10)){
  26. cout<<"Login correcto"<<usuario<<endl;
  27. system("toperativ");}
  28. else{cout<<"Login incorrecto"<<endl;
  29. system("pause");
  30. system("cls");
  31. goto login;}

En este código:

Primero: Veo que no usas la librería "string.h" para manejar las cadenas, como en la línea 25 para hacer la comparacion con strcmp o con strncmp, ya que en la forma que lo haces no va a funcionar por no ser el método de comparar cadenas, eso serviría en números o en caracteres, pero no en cadenas.

Segundo: Las variables que usas para el ingreso de datos del usuario y pass los sobreescribes con lo que lees del archivo, así que no estas haciendo nada, coloca cada dato en variables diferentes.

Tercero: No estas recorriendo todo tu archivo buscando al usuario y pass correspondiente, ya que en el modo que abres tu archivo se supone que vas a tener más de un usuario (ios::app) y tu sólo lees la primera y segunda linea.

Espero te sirva.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Última edición por CapacProg; 24/06/2011 a las 10:57
  #3 (permalink)  
Antiguo 24/06/2011, 12:55
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: una entrar unos datoss y comparar con txt..

gracias, intentaré ir paso x paso haber si corrijo, porqe no se x dónde empezar
  #4 (permalink)  
Antiguo 24/06/2011, 13:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 1 mes
Puntos: 228
Respuesta: una entrar unos datoss y comparar con txt..

Primero que todo ya que estas usando C++ usaria string y no cadenas de caracteres. Los strings son mas faciles de usar.

string user, pass;
string user2,pass;

Luego, si usas cin.getline siempre vas a leer del teclado nunca del archiv oqeu abiste.

getline(fe,user2);
getline(fe,pass2);

Luego para comprar string simplemente haces:

if (user == user2 && pass == pass2)

Lo que si como dijo el compañero capacpro si solo haces un getline obtendras los datos de un solo usuario deberias hacer un bucle para ir leyendo usuario por usuario.
  #5 (permalink)  
Antiguo 24/06/2011, 14:07
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: una entrar unos datoss y comparar con txt..

bueno de momento preubo con un solo usuario, luego más adelante cuando vaya probando y viendo cmo va lo cambio

gracias
  #6 (permalink)  
Antiguo 24/06/2011, 14:36
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: una entrar unos datoss y comparar con txt..

bien ya lo he cambiado y ahora creo que lo de antes esta correjido( miren a ver si es correcto) con strings pero para un solo usuario( cuando consiga uno ya intentaré el bucle).

Ahora creo que el problema esta en como lee el archivo txt porque si abro el txt normal me aparece desde el inicio del documento primera linea blanco,segunda user y tercera pass y necesito que el programa guarde el user en la primera y el pass en la segunda para que funcione.Lo hice manualmente escribiendo en el txt en primera linea y segunda y funcionó. ( si estoy totalmente equivocado corrijanme)

codigo del menu:

//Menú de programa
#include <iostream>
#include <fstream>


using namespace std;


int main(){
system("color 1E");
menu:
cout<<"1-Entrar"<<endl;
cout<<"2-Registrarse"<<endl;
int opt;
cin>>opt;
system("cls");


switch(opt){

case 1:{ system("jk");}

case 2:{

string usuario;
string pass;
registro:
ofstream fs("reg.txt", ios::app);
cout<<"Introduce nombre de usuario:";
cin>>usuario;
cout<<endl;
cout<<"Introduce el pass:";
cin>>pass;
fs<<usuario<<"\n";
fs<<pass;
fs.close();

ifstream fe("reg.txt");

system("cls");
cout<<"Usuario:"<<usuario<<endl;
getline(fe,usuario);
cout<<"\n";
cout<<"Pass:"<<pass<<endl;
getline(fe,pass);
cout<<"\n";
cout<<"Datos correctos?s/n"<<endl;
string resp;
cin>>resp;
if(resp=="s"){system("cls"); goto menu;}
if(resp=="n") {goto registro;}
else{exit(0);}
system("cls");


}
}
}





codigo del login

#include<fstream>
#include<string>
using namespace std;

int main()
{
system("color 1E");
login:
string user,pass;
string user2,pass2;
cout<<"User:";
cin>>user;
cout<<"\n";
cout<<"Pass:";
cin>>pass;

cout<<"Comprovando"<<endl;

ifstream fe("reg.txt", ios::in);
getline(fe,user2);
getline(fe,pass2);
system("cls");

if(user==user2 && pass==pass2){
cout<<"Login correcto"<<user<<endl;
system("toperativ");}
else{cout<<"Login incorrecto"<<endl;
system("pause");
system("cls");
goto login;}

}

Última edición por snitch; 24/06/2011 a las 15:21
  #7 (permalink)  
Antiguo 24/06/2011, 23:49
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: una entrar unos datoss y comparar con txt..

Después de

Código C++:
Ver original
  1. cin>>pass;

utiliza

Código C++:
Ver original
  1. cin.ignore()

para descartar el Enter que das al confirmar el ingreso de la cadena, lo mismo deberias usar despues de leer una cadena. Ese puede ser tu error.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #8 (permalink)  
Antiguo 26/06/2011, 13:49
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: una entrar unos datoss y comparar con txt..

el cin.ignore no lo soluciona, pero gracias

Creo que el error( a parte de la organización) esta en que no lee todo el archivo que solo me lee el primer usuario y pass que inserto y los siguientes no.

En el txt las entradas se van guardando(user,pass) así x ejemplo:
juan
lele
pepe
123

si introduzco en user juan y pass lele funciona, pero en los succesivos no. he decidido rehacer el codigo haber si alguien encuentra como arreglarlo


codigo menu
/
Código C++:
Ver original
  1. /Menu
  2. #include<iostream>
  3. #include<fstream>
  4. #include<string>
  5.  
  6. using namespace std;
  7. struct registro{
  8.        
  9.        string user;
  10.        string pass;
  11.        }persona;
  12.        
  13. struct login{
  14.        string luser;
  15.        string lpass;
  16.        }lpersona;
  17.        
  18.        
  19. using namespace std;
  20. int main(){
  21.    
  22.     system("color 1E");
  23.     menu:
  24.     cout<<"1-Entrar"<<endl;
  25.     cout<<"2-Registrarse"<<endl;
  26.     cout<<"3-Salir"<<endl;
  27.      int a;
  28.      cin>>a;
  29.      system("cls");
  30.      switch(a){
  31.                case 1:{login:
  32.                        cout<<"\tLogin"<<endl;
  33.                        cout<<"\nUser:";
  34.                        cin>>lpersona.luser;
  35.                        cout<<"\nPass:";
  36.                        cin>>lpersona.lpass;
  37.                        ifstream fe("db.txt" ,ios::in);
  38.                        getline(fe,persona.user);
  39.                        getline(fe,persona.pass);
  40.                        
  41.                        while(!fe.eof()){
  42.                                         if(lpersona.luser==persona.user && lpersona.lpass==persona.pass){system("cls");
  43.                                                                        cout<<"\nLogin correcto"<<endl;
  44.                                                                        system("pause");
  45.                                                                        system("tactivo");
  46.                                                                        exit(0);
  47.                                                                        }
  48.                                         if(lpersona.luser!=persona.user && lpersona.lpass!=persona.pass){system("cls");
  49.                                                                        cout<<"\nLogin incorrecto"<<endl;
  50.                                                                        system("pause");
  51.                                                                        system("cls");
  52.                                                                        goto login;
  53.                                                                        }
  54.                                         }                            
  55.                        
  56.                                
  57.                        
  58.                
  59.                }
  60.                case 2:{registro:
  61.                        ofstream fs("db.txt", ios::app);
  62.                        cout<<"Introduce el user que quieras:";
  63.                        cin>>persona.user; fs<<persona.user<<"\n";
  64.                        cout<<"\nIntroduce el pas que quieras:";
  65.                        cin>>persona.pass; fs<<persona.pass<<"\n";
  66.                        fs.close();
  67.                        system("cls");
  68.                        ifstream fe("db.txt");
  69.                        getline(fe,persona.user);
  70.                        cout<<"User:"<<persona.user<<endl;
  71.                        getline(fe,persona.pass);
  72.                        cout<<"Pass:"<<persona.pass<<endl;
  73.                        cout<<"\nDatos correctos?s/n"<<endl;
  74.                        string resp;
  75.                        cin>>resp;
  76.                        if(resp=="s"){cout<<"Guardando datos"<<endl;
  77.                        system("cls");
  78.                        goto menu; break;}
  79.                        if(resp=="n"){system("cls"); goto registro; break;}
  80.                        else{return(0);}
  81.                        
  82.  
  83.                     }
  84.                case 3:{exit(0);}
  85.                }
  86.                
  87. }

tactivo ( lugar donde dirije una vez logeado correctamente, no tiene errores)

Código C++:
Ver original
  1. //Terminal activo
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    
  8.     system("cls");
  9.     system("color 1E");
  10.     cout<<"\nBienvenido al terminal"<<endl;
  11.     cout<<"\nTerminal en pruebas,proxiamente funcional.."<<endl;
  12.     system("pause");
  13.     exit(0);
  14.    
  15. }

Última edición por snitch; 26/06/2011 a las 14:03
  #9 (permalink)  
Antiguo 26/06/2011, 14:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 1 mes
Puntos: 228
Respuesta: una entrar unos datoss y comparar con txt..

Tu problema esta que siempre comparas con el primero ya que solo lees una vez y despues volves a cargar el fichero si falla. Mira esto:

Código C++:
Ver original
  1. Deberias leer las lineas dentro del While.
  2.  
  3. case 1:{login:
  4.                        cout<<"\tLogin"<<endl;
  5.                        cout<<"\nUser:";
  6.                        cin>>lpersona.luser;
  7.                        cout<<"\nPass:";
  8.                        cin>>lpersona.lpass;
  9.                        ifstream fe("db.txt" ,ios::in);
  10.                      
  11.                        
  12.                        while(!fe.eof()){
  13.                                         if(lpersona.luser==persona.user && lpersona.lpass==persona.pass){system("cls");
  14.                                                                        cout<<"\nLogin correcto"<<endl;
  15.                                                                        system("pause");
  16.                                                                        system("tactivo");
  17.                                                                        exit(0);
  18.                                                                        }
  19.                                         getline(fe,persona.user);
  20.                                         getline(fe,persona.pass);
  21.                                         }          
  22.                        cout<<"\nLogin incorrecto"<<endl;
  #10 (permalink)  
Antiguo 26/06/2011, 14:21
 
Fecha de Ingreso: junio-2011
Mensajes: 6
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: una entrar unos datoss y comparar con txt..

perfecto ahora ya funciono muchas gracias!
ahora tengo que cambiar la parte del registro para que cuando confirme los datos muestre los entrados bien.

Etiquetas: txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:50.