[C con Clase] Duda acerca de else if
Oscar Aparicio Holgado
pelucheloko en hotmail.com
Vie Abr 25 21:46:12 CEST 2014
el switch era la versión 1 del programa :-) lo cambié por los if etc.
Modifiqué el programa para que yo solo usase las variables PIEDRA etc, en todos los casos, y el --eleccion
Muchas gracias por todos los apuntes Steven, un saludo!
Date: Fri, 25 Apr 2014 12:25:38 -0400
From: srd4121 en njit.edu
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] Duda acerca de else if
Hola Óscar,
2014-04-25 7:04 GMT-04:00 Oscar Aparicio Holgado <pelucheloko en hotmail.com>:
Muy buena Steven el if que compara si eleccion es igual a s, jamás se me habría ocurrido :-)
Como dije, se trata de representar los conceptos y usar tal representación. Originalmente, representaste cada elección de la máquina usando cadenas de caracteres, pero usaste otra representación para la elección del usuario. Si usas una representación común, entonces podemos tratar el mismo concepto - la elección - de la misma manera.
El código de ahora con el if y el enum (¿está bien usado?) sería este:
Sí, aunque como he explicado deberías tratar 's' y 'eleccion' de la misma manera. Esto es,
else if(eleccion == 1)
Aquí 1 no tiene ningún sentido para nosotros. Tendríamos que recordar que 1 representa "piedra". ¿Por qué recordar esto cuando podemos usar una constante con un nombre descriptivo para comunicar tal idea?
Escribe,
else if( eleccion-1 == PIEDRA )
Esto es mucho más legible y por tanto seremos menos propensos a cometer errores.
{ if(s == PAPEL) cout << "Perdistes panoli!" << endl; else
cout << "Ganastes tronko!" << endl; } else if(eleccion == 2)
Aquí hacemos lo mismo,
else if( eleccion-1 == PAPEL )
if(s == PIEDRA) cout << "Ganastes tronko!!" << endl; else cout << "Perdistes panoli!!" << endl;
else if(s == PIEDRA) cout << "Perdistes panoli!!!" << endl; else cout << "Ganastes tronko!!!" << endl;
return 0;}
Como puedes ver, vas a necesitar usar 'eleccion-1'. Por lo tanto, sugiero que hagas esta resta permanente nada más conseguir tal elección; esto es,
cin >> eleccion;
--eleccion;
if( s == eleccion ) ...
if( eleccion == PIEDRA ) ...
Ya no tienes que estar restando 1 cada vez que uses 'eleccion'.
La otra alternativa es usar un 'switch/case' en lugar de 'if/else'; o sea,
// ¿Empate?if( s == eleccion ) ...
// No hay empateswitch( eleccion )
{
case PIEDRA: ... case PAPEL: ... case TIJERA: ... default: ...}
Espero que esto te oriente.
Steven
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140425/2bc42296/attachment-0001.html>
Más información sobre la lista de distribución Cconclase