Ayuda con un problema de ciclos en C++

Publicado por Brunky
hace 7 años

Estoy tratando de hacer una calculadora muy sencilla en C++ que permita realizar operaciones básicas con dos operandos y luego le pregunte al usuario si desea continuar o salir. Tengo este código:

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

int sumar(int x, int y)
{
  return x + y;
}

int restar(int x, int y)
{
  return x - y;
}

int multiplicar(int x, int y)
{
  return x * y;
}

int dividir(int x, int y)
{
  return x / y;
}

int main()
{
  int x, y;
  string opreacion;
  string repetir = "s";

  while (repetir == "s" or "S")
  {
    cout << "CALCULADORA: Version 1.0" << endl;
    cin >> x >> operacion >> y;

    if (operacion == "+")
    {
      cout << "Resultado: " << sumar(x, y) << endl;
    }
    else if (operacion == "-")
    {
      cout << "Resultado: " << restar(x, y) << endl;
    }
    else if (operacion == "*")
    {
      cout << "Resultado: " << multiplicar(x, y) << endl;
    }
    else if (operacion == "/")
    {
      cout << "Resultado: " << dividir(x, y) << endl;
    }
    else
    {
      cout << "Este no es un signo valido. Por favor elige otro para continuar" << endl;
    }

    cout << "Quieres continuar? s/n" << endl;
    cin >> repetir;

    if (repetir == "n" or "N")
    {
      cout << "Saliendo..." << endl;
      break;
    }
  }
}

El problema es que cuando el programa me pregunta si deseo continuar y le pongo que si, aun así se corta el ciclo y se cierra. No entiendo por que pasa eso si deberia seguir funcionando hasta que le ingrese "n" para salir.

c++ ciclos
Respuesta de Cristian Olaz
hace 7 años

Hola. Tenés un problema en el if que también pusiste en la condición del ciclo. Cuando hacés esto:

if (repetir == "n" or "N")

Es como si pusieras esto:

if ((repetir == "n") or "N")

Entonces la condición de ese if siempre será verdadera. Por eso el ciclo se corta. Lo que tendrías que hacer ahí es:

if (repetir == "n" || repetir == "N")

Por otra parte, en el while podrías dejar un

while (true)

Ya que el ciclo se cortará solo cuando el usuario decida no seguir. Saludos.