Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: torralbita en 7 Diciembre 2012, 19:09 pm



Título: Presentacion y pequeña duda en c++
Publicado por: torralbita en 7 Diciembre 2012, 19:09 pm
Buenas! actualmente estoy estudiando Ingenieria de Computadores y me encanta todo lo relacionado con la programació, linux etc... Hace muchos años que os sigo pero nunca me ha dado por registrarme.

Me gustaría pediros consejo acerca de un código que tengo entre manos para mi clase de programación, me está dando muuucho la lata.
Tengo que leer y escribir mediante ofstream e ifstream en un txt con usuarios y contraseñas para, una vez logueado, poder jugar a un juego.

El problema que tengo es que si fallo la contraseña 2 veces (por ejemplo) y la introduzco bien la tercera vez no hace nada! debería de poder acceder al juego.

Pego parte del código por si alguien pudiese echarme una mano.
Puedo poner el código completo y funcional si hiciese falta.

Mil gracias de antemano!!

Saludos.

Código:
	cout << "Por favor, introduce tu apodo: ";
cin >> apodo;
cout << "Contraseña: ";
cin >> password;

lecturareg.open("registro.txt");
escrituratmp.open("tmp.txt");

do
{
lecturareg >> d;
escrituratmp << d << endl;

if(d == apodo){
lecturareg >> d;
escrituratmp << d << endl;
if(d == password)
found = true;
else
{
for(i = 1; i <= 2; i++) {
cout << "Contraseña incorrecta! Vuelve a intentarlo: ";
cin >> password;
}
if(i == 3)
{
cout << "Lo siento, pero has fallado demasiadas veces. No puedes jugar." << endl;
opmenu = 0;
}
}
}
} while(found == false && d != "XXX");

lecturareg.close();
escrituratmp.close();

if(found == false && i == 0)
{
lecturatmp.open("tmp.txt");
escriturareg.open("registro.txt");

do
{
lecturatmp >> d;

if(d != "XXX")
escriturareg << d << endl;
else
escriturareg << apodo << endl << password << endl << "XXX";
} while(d != "XXX");

}

lecturatmp.close();
escriturareg.close();


Título: Re: Presentacion y pequeña duda en c++
Publicado por: leosansan en 7 Diciembre 2012, 19:45 pm

El problema que tengo es que si fallo la contraseña 2 veces (por ejemplo) y la introduzco bien la tercera vez no hace nada! debería de poder acceder al juego.

Código:
				for(i = 1; i <= 2; i++) {
cout << "Contraseña incorrecta! Vuelve a intentarlo: ";
cin >> password;
}
if(i == 3)
{
cout << "Lo siento, pero has fallado demasiadas veces. No puedes jugar." << endl;

Citar

Ya lo dice el código, a la tercera:Lo siento, pero has fallado demasiadas veces. No puedes jugar. ¿O estas preguntando otra cosa?


Saluditos!.


Título: Re: Presentacion y pequeña duda en c++
Publicado por: dato000 en 7 Diciembre 2012, 21:36 pm
Exacto, el problema en esta parte del codigo al parecer (al menos para esta sección de tu programa) radica en que dejas la valoracion del condicional por fuera del ciclo, y tomas "i" como un argumento global, pero una vez termina el for, "i" deja de ser utilizable para este proceso.

Yo realmente lo haria con un do-while, pero eso es solo gustos, solo haz un ciclo con mas de tres repeticiones, yo le pongo cinco, me gusta ese numero.

Código
  1. for(i = 1; i <=5 ; i++) {
  2.        cout << "Contraseña incorrecta! Vuelve a intentarlo: ";
  3. cin >> password;
  4. if(i >= 3)
  5. {
  6. cout << "Lo siento, pero has fallado demasiadas veces. No puedes jugar." << endl;
  7.                                        break;
  8.                                }
  9. }
  10.  


Título: Re: Presentacion y pequeña duda en c++
Publicado por: torralbita en 7 Diciembre 2012, 23:43 pm
Muchísmas gracias a ambos! he probado a modificar el código pero no hay forma. Sigue sin pillar la contraseña una vez se ha introducido mal, me explico.
1º - Creo un nuevo usuario "prueba"  con su contraseña "prueba".
2º - Accedo al programa e intento loguearme poniendo mal dos veces la contraseña.
3º - Al tercer intento introduzco la contraseña correcta pero no me la pilla.

Será mucho pedir pero os dejo el zip con el cpp y los txt corresponidentes por si pudiérais echarle un ojo a esa parte.


https://dl.dropbox.com/u/53489612/main.zip (https://dl.dropbox.com/u/53489612/main.zip)

Saludetes!



Título: Re: Presentacion y pequeña duda en c++
Publicado por: leosansan en 8 Diciembre 2012, 16:34 pm
He cambiado el for, que no tenía mucho sentido, por un while.
No me termina de convencer el código, pero hace lo que quieres:

Código
  1. do
  2. {
  3.        lecturareg >> d;
  4. escrituratmp << d << endl;
  5. if(d == apodo){
  6. lecturareg >> d;
  7. escrituratmp << d << endl;
  8. if(d == password){
  9.                    found = true;
  10.                    i=0;
  11.            while(found == false){
  12.                i++;
  13.                cout << "Contraseña incorrecta! Vuelve a intentarlo: ";
  14.                cin >> password;
  15.                if(d == password)
  16.                    found = true;
  17.                if(found == false && i == 2){
  18. cout << "Lo siento, pero has fallado demasiadas veces. No puedes jugar." << endl;
  19. return 1;
  20. }
  21.            }
  22.        }
  23.  
  24. } while(found == false && d != "XXX" );
Saluditos!.


Título: Re: Presentacion y pequeña duda en c++
Publicado por: torralbita en 8 Diciembre 2012, 16:40 pm
leosanan, mil gracias compañero! ahora funciona tal y como quería!! no tengo ni idea por que usé un for en lugar de un while.

¿Se ve muy mal el código? nuestro profesor nos dijo que usáramos lo que habíamos dado en clase y nos liásemos con cosas extrañas.


Lo dicho, muchísimas gracias por la ayuda, me ha quedado más claro como funciona.

Buen finde!


Título: Re: Presentacion y pequeña duda en c++
Publicado por: leosansan en 8 Diciembre 2012, 16:41 pm
Citar
FIJATE QUE HE REEDITADO EL CODIGO ¡ ¡ ¡ ¡


Título: Re: Presentacion y pequeña duda en c++
Publicado por: torralbita en 8 Diciembre 2012, 17:23 pm


Lo acabo de ver compañero! el caso es que el registro de nuevos usuarios funcionaba bien con lo que me habías comentado antes de la edición, lo miraré igualmente.

Por cierto, el "return 1"  ¿se podría cambiar por algún equivalente?

Mil gracias por las molestias tomadas.

Un saludo.


Título: Re: Presentacion y pequeña duda en c++
Publicado por: leosansan en 8 Diciembre 2012, 18:03 pm

Por cierto, el "return 1"  ¿se podría cambiar por algún equivalente?

Es una forma de salir del programa, como el "return 0", e indica una salida correcta o prevista.
Podría usarse exit (), creo que con la librería stdlib, pero para gustos colores.
Saluditos!.