Duda momentánea con C++

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Responder
Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8283
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Duda momentánea con C++

Mensaje por largeroliker »

Nas, estoy haciendo unos ejercicios en clase y no encuentro el porqué de esto...

Enunciado:

6.- Codifique un programa que se comporte como una calculadora simple que realice
operaciones hasta que el usuario introduzca el carácter ‘&’. Para ello deberá tener las
siguientes características:
- Solo efectuará operaciones con dos operandos.
- Operaciones permitidas: (+,-,*,/).
- Se trabajará con operandos enteros.- Pedirá en primer lugar la operación a
realizar, y a continuación los dos operandos.
- Si el operador no se corresponde con alguno de los indicados se emitirá un
mensaje de error.
Ejemplo:
Operación : *
Operando 1 : 13
Operando 2 : 10
Resultado : 130
Operación : u
ERROR!!!!
Operación : +
Operando 1 : 12
Operando 2 : 3
Resultado : 15
Operación : &
FIN DEL PROGRAMA.


Mi código:

Código: Seleccionar todo

#include <iostream>
 using namespace std;
 int main ()
 {
    int num1;
    int num2;
    int res;
    char op;
     cout << "Operacion: ";
     cin.get(op);
          //Debug
     cout << op;
     while ( !(op = '&' )) {
     switch (op) {
     case '+':
        cout << "\nOperando 1: ";
        cin >> num1;
        cout << "\nOperando 2: ";
        cin >> num2;
        res = num1 + num2;
        cout << "\nResultado: " << res;
        break;
     case '-':
          cout << "\nOperando 1: ";
          cin >> num1;
          cout << "\nOperando 2: ";
          cin >> num2;
          res = num1 - num2;
          cout << "\nResultado: " << res;
          break;
     case '*':
          cout << "\nOperando 1: ";
          cin >> num1;
          cout << "\nOperando 2: ";
          cin >> num2;
          res = num1 * num2;
          cout << "\nResultado: " << res;
          break;
     case '/':
          cout << "\nOperando 1: ";
          cin >> num1;
          cout << "\nOperando 2: ";
          cin >> num2;
          res = num1 / num2;
          cout << "\nResultado: " << res;
          break;
     default:
        cout << "ERROR!!\n";
        cout << "Operacion: ";
        cin >> op;
     }}
     if (op = '&' )
     {
      cout << "FIN DEL PROGRAMA";
      return 0;
     }
     return 0;
     }


Cuál es mi sorpresa al ver que, sin tocar aparentemente nada, si introduzco como carácter "+" se convierte mágicamente en un "&" y acaba el programa 0o

Ahora mismo estoy cegado, alguien me echa una mano?
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Duda momentánea con C++

Mensaje por m0skit0 »

No veo nada raro, pero como lo formateas a tu manera tampoco me fío de mi vista. No tengo ningún entorno de C/C++ para probar en el curro, lo siento. Si a las 7 o por ahí no te lo han resuelto, lo pruebo en casa y te cuento.

PD: num1 y num2 los puedes coger fuera de los cases, hombre :roll:
PD2: ¿para qué vuelves a comparar op al salir del while? Es la misma condición ;)
Imagen

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8283
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: Duda momentánea con C++

Mensaje por largeroliker »

m0skit0 escribió:PD: num1 y num2 los puedes coger fuera de los cases, hombre :roll:


Ya lo veo, es que empecé haciéndolo de otra forma y al cambiar a esta acabó así xD
Ahora lo cambio.
m0skit0 escribió:PD2: ¿para qué vuelves a comparar op al salir del while? Es la misma condición ;)


Vale, esto ya lo veo de nuevo, la única opción que da para "saltarse" el bucle es la que quiero que dé el error...ya de paso me quito el return 0 que sobra.

PD: Mejor esto último lo dejo, y cambio el while ( !(op = '&' )) por un while ( (op = '+') || (op = '-') ||...)
A ver qué sale.
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Responder