Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yugget en 28 Junio 2014, 15:10 pm



Título: While repetitivo
Publicado por: Yugget en 28 Junio 2014, 15:10 pm
Hola muy buenas,

Tengo un problema y es que estoy uso de un switch todo bien, pero mi problema llega a repetir esa acción otra vez, osea cuando calcule el resultado, introduce otra letra y le repetirá de nuevo la accion del switch.

El problema está en la funcion Volver, en el while que se me repite hola sin parar y quiero que solo se repita 1 vez. Osea que muestre una vez solo HOLA.

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. char c;
  7.  
  8. int num1, num2, resultado;
  9.  
  10. void datos(){
  11. cout << "Valor 1: ";
  12. cin >> num1;
  13. cout << "Valor 2: ";
  14. cin >> num2;
  15. system("cls");
  16. }
  17.  
  18. void volver(){
  19. while(c == 't'){
  20. cout << "Hola" << endl;
  21. }
  22. }
  23.  
  24. void sumar(){
  25. datos();
  26. resultado = num1 + num2;
  27. cout << "El resultado de la suma es: " << resultado << endl;
  28. cout << "Si quiere volver al menu escriba la letra T: ";
  29. cin >> c;
  30. volver();
  31. }
  32.  
  33. int main(){
  34. cout << "Introduca la letra a: ";
  35. cin >> c;
  36. system("cls");
  37.  
  38. switch(c){
  39. case 'a':
  40. sumar();
  41. break;
  42.  
  43. default:
  44. cout << "La letra introducida es erronea" << endl;
  45. }
  46.  
  47. cin.get();
  48. return 0;
  49. }


Título: Re: While repetitivo
Publicado por: Blaster en 28 Junio 2014, 15:44 pm
Tengo un problema y es que estoy uso de un switch todo bien, pero mi problema llega a repetir esa acción otra vez, osea cuando calcule el resultado, introduce otra letra y le repetirá de nuevo la accion del switch.

Para ese proposito simplemente deja asi la función volver

Código
  1. void volver()
  2. {
  3.     if (c == 't'){
  4.       cout << "Hola\n" << endl;
  5.       sumar();
  6.     }
  7. }

No es necesario el while

Saludos


Título: Re: While repetitivo
Publicado por: eferion en 28 Junio 2014, 17:00 pm
Ese uso, Blaster, es un poco bizarro... estás creando una recursividad totalmente innecesaria y eso te puede acabar pasando factura al complicarse el ciclo de ejecución del programa.

A ver, TomasinSG, ¿Cual es la parte del código que se ha de repetir indefinidamente hasta que el usuario diga lo contrario? Es lógico pensar que el bucle while debe estar en dicha función, no en "volver":

Código
  1. void sumar( )
  2. {
  3.  do
  4.  {
  5.    datos( );
  6.    resultado = num1 + num2; // por favor, NO USES VARIABLES GLOBALES!!!!!
  7.    cout << "..." << resultado << endl;
  8.    cout << "...";
  9.    cin >> c;
  10.  } while ( c != 'T' );
  11. }

Si la comprobación c!='T' quieres encapsularla en una función, perfectamente puedes hacer que esa función devuelva true o false en función de si se debe volver al menú inicial o no...

Código
  1. void sumar( )
  2. {
  3.  do
  4.  {
  5.    datos( );
  6.    resultado = num1 + num2; // por favor, NO USES VARIABLES GLOBALES!!!!!
  7.    cout << "..." << resultado << endl;
  8.  } while ( !volver( ) );
  9. }
  10.  
  11. bool volver( )
  12. {
  13.  cin >> c;
  14.  return c == 'T';
  15. }