While repetitivo

Iniciado por Yugget, 28 Junio 2014, 15:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Yugget

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 (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

char c;

int num1, num2, resultado;

void datos(){
cout << "Valor 1: ";
cin >> num1;
cout << "Valor 2: ";
cin >> num2;
system("cls");
}

void volver(){
while(c == 't'){
cout << "Hola" << endl;
}
}

void sumar(){
datos();
resultado = num1 + num2;
cout << "El resultado de la suma es: " << resultado << endl;
cout << "Si quiere volver al menu escriba la letra T: ";
cin >> c;
volver();
}

int main(){
cout << "Introduca la letra a: ";
cin >> c;
system("cls");

switch(c){
case 'a':
sumar();
break;

default:
cout << "La letra introducida es erronea" << endl;
}

cin.get();
return 0;
}

Blaster

#1
Cita de: TomasinSG en 28 Junio 2014, 15:10 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 (cpp) [Seleccionar]
void volver()
{
     if (c == 't'){
      cout << "Hola\n" << endl;
       sumar();
    }
}


No es necesario el while

Saludos

eferion

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 (cpp) [Seleccionar]

void sumar( )
{
  do
  {
    datos( );
    resultado = num1 + num2; // por favor, NO USES VARIABLES GLOBALES!!!!!
    cout << "..." << resultado << endl;
    cout << "...";
    cin >> c;
  } while ( c != 'T' );
}


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 (cpp) [Seleccionar]

void sumar( )
{
  do
  {
    datos( );
    resultado = num1 + num2; // por favor, NO USES VARIABLES GLOBALES!!!!!
    cout << "..." << resultado << endl;
  } while ( !volver( ) );
}

bool volver( )
{
  cin >> c;
  return c == 'T';
}