programa que lee solo la primera parte en c++

Iniciado por yina07, 24 Noviembre 2019, 04:12 AM

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

yina07

Hola! necesitaba ayuda en esta tarea, no se por que razón no me lee la parte de la resta debajo de
la suma, intente ponerle un break y no funciona, no se que es lo que me falta pero me detuve en la
parte de la resta porque solo me lee lo primero y cuando introduzco 2 valores aunque ponga el numero
2 del menu, que es la resta, sigue sumandome los numeros. Por favor ayuda, y a parte al final del
programa debe preguntar si quiere que lo cierre presione 1 y si desea continuar presionar 0, y debo
hacer esto segun mi profesor con un bucle while, pero no me funciona, no se si lo puse donde no iba,
pero segun él, el programa entero debe estar dentro del bucle, les agradeceria que me expliquen lo que
esta mal por favor. Gracias (el enunciado del programa esta al inicio)


#include <iostream>
using namespace std;


/*

Realizar la operaciones matemáticas básicas (suma, resta, multiplicación, división
y las demás funciones que quiera agregar libremente) utilizando un menú donde el
usuario seleccione primero la operación que desea realizar.  Luego que seleccione
la operación, debe pedir que digite dos valores a usar en la operación.






*/



int main (){
   

   
   
   int Suma;
   int Resta;
   int Multiplicacion;
   int Division;
   
   
   //valores de la suma
   
   int a;
   int b;
   
   int valoressum = a + b;
   
   
   
   //valores de la resta
   
   int c;
   int d;
   
   int valoresresta = c - d;
   
   
   
   cout<<"Menu"<<endl<<"Que operacion desea realizar?"<<endl<<"1. Suma"<<endl<<"2. Resta"<<endl<<"3. Multiplicacion"<<endl<<"4. Division"<<endl;
   
   
   //suma
   

   

   cin>>Suma;
   
   
   
   if (Suma = 1){
      
      
      cout<<"Digite 2 valores"<<endl;
      
         cin>>a;
         cin>>b;
   
   
      
   }
   
   
   if (valoressum = a + b)
   {
      
      
      cout<<"El resultado es"<<endl<<valoressum<<endl;
   }
   
   
   //resta

   cin>>Resta;
   
   
   
   if (Resta = 2){
      
      
      cout<<"Digite 2 valores"<<endl;
      
         cin>>a;
         cin>>b;
   
   
      
   }
   
   
   if (valoressum = c - d)
   {
      
      
      cout<<"El resultado es"<<endl<<valoresresta<<endl;
   }
   
   
   
   
   
   
   
   
   
   
   
   return 0;
}

K-YreX

Ya llevas varios mensajes en el foro por lo que deberías empezar a aplicar las normas básicas como poner tu código entre etiquetas de Código GeSHi y aplicar unos mínimos de orden como no poner un código con más líneas en blanco entre medias que las que tienen algo de código. Si sigues sin hacer caso, llegará un día que nadie te ayude...

Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main (){
   int Suma;
   int Resta;
   int Multiplicacion;
   int Division;
   
   //valores de la suma
   int a;
   int b;
 
   int valoressum = a + b;
   
   //valores de la resta
   
   int c;
   int d;
   
   int valoresresta = c - d;
   
   cout<<"Menu"<<endl<<"Que operacion desea realizar?"<<endl<<"1. Suma"<<endl<<"2. Resta"<<endl<<"3. Multiplicacion"<<endl<<"4. Division"<<endl;
   
   
   //suma
 
   cin>>Suma;
   
   if (Suma = 1){   
      cout<<"Digite 2 valores"<<endl;
         cin>>a;
         cin>>b;
   }
   
   if (valoressum = a + b)
   {
      cout<<"El resultado es"<<endl<<valoressum<<endl;
   }
   
   //resta

   cin>>Resta;
   
   if (Resta = 2){
      cout<<"Digite 2 valores"<<endl;
         cin>>a;
         cin>>b;
   }
   
   if (valoressum = c - d)
   {
      cout<<"El resultado es"<<endl<<valoresresta<<endl;
   }

   return 0;
}

Ese código es un auténtico caos... Sobran variables por todos los lados, hay operaciones que no tienen sentido, se utilizan variables que no poseen ningún valor (poseen basura), las condiciones de los <if> están mal implementadas y además no tienen ningún sentido.
Mi humilde opinión es que debes buscar un rato para dedicarle a la programación y empezar desde el principio ya que veo muchos errores de un nivel muy básico.

No sirve de nada que intentes hacer un <while()> cuando estoy viendo que el propio planteamiento del programa está mal pensado y por ende, mal implementado.

Lo que tienes que hacer en ese programa, olvidándonos del bucle, es:
  • Crear dos variables: numero1 y numero2 que serán los que almacenen los valores del usuario para los operandos.
  • Crear una variable: resultado que será la que almacene el resultado de la operación que elija el usuario.
  • Crear una variable: opcion que será la que guarde la operación a realizar (ej: 1 = suma, 2 = resta, 3 = multiplicación, etc).

    Ahora el proceso es sencillo:
  • Mostrar en un mensaje las posibles operaciones y pedir al usuario que elija una de ellas (y guardarla en la variable <opcion>).
  • Pedir al usuario que introduzca dos operandos (y guardarlos en <numero1> y <numero2>).
  • Implementar unos condicionales <if()> para comprobar la opción elegida y según la opción asignar a la variable <resultado> el resultado de realizar la operación correspondiente.
  • Mostrar el resultado.

    En pseudocódigo sería algo como esto:

    INICIO
        PEDIR "Elige una operacion: " opcion
        PEDIR "Introduce el primer operando: " numero1
        PEDIR "Introduce el segundo operando: " numero2

        SI opcion == 1 ENTONCES // suponiendo que 1 es la suma
            resultado = numero1 + numero2
        SINO SI opcion == 2 ENTONCES // suponiendo que 2 es la resta
            resultado = numero1 - numero2
        // asi con cada una de las posibles operaciones
        FIN SI

        MOSTRAR "El resultado de la operacion es: " + resultado
    FIN


    Intenta hacer eso. Si tienes algún problema en alguna parte concreta siempre puedes poner un mensaje con el código (repito: entre etiquetas de Código GeSHi) y explicando tu problema o duda para que te ayudemos. Cuando tengas eso conseguido, será más fácil ayudarte con lo del bucle. De momento, vamos con lo fácil y después vamos agregando cosas nuevas.

    PD: En C/C++ las comparaciones se realizan con ==, el operador = es el de asignación:
  • a == b -> Comprueba si a es igual a b
  • a = b -> Asigna el valor de b a la variable a
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

yina07

Cita de: YreX-DwX en 24 Noviembre 2019, 05:00 AM
Ya llevas varios mensajes en el foro por lo que deberías empezar a aplicar las normas básicas como poner tu código entre etiquetas de Código GeSHi y aplicar unos mínimos de orden como no poner un código con más líneas en blanco entre medias que las que tienen algo de código. Si sigues sin hacer caso, llegará un día que nadie te ayude...


Ok! disculpa si te ofendi, soy nueva en esto de la programacion y no se mucho, me imagino que tu tambien pasaste por esto, pero en fin. Esto es lo que he hecho y no se por que me da error en el if

Código (cpp) [Seleccionar]


int numero1;
int numero2;

int resultado;

int opcion [] = {0, 1, 2, 3, 4};

cout<<"Que operacion desea realizar?"<<endl;

cin>>numero1;
cin>>numero2;

if (opcion == 1) {



resultado = numero1 + numero2;

}

else if (opcion == 2){


resultado = numero1 - numero2;
}


K-YreX

Obviamente yo también tuve unos inicios y no me ofende que no sepas programar o que tengas errores básicos porque para eso es el foro, para ayudar. Lo que me molesta es que haya muchas personas que comentan ocasionalmente y no se molesten en poner los códigos entre etiquetas y más cuando siempre aconsejo usar dichas etiquetas (puedes comprobar en el otro post que hiciste AQUÍ que también te avisé de poner los códigos entre etiquetas y creo que lo hice con toda la educación que tengo).
Dicho esto, que no quiero que sea el comienzo de una pelea, sólo mostrar porque a veces no tengo tanta paciencia para repetir lo de las etiquetas, vamos al problema.
Ahora tu código ya tiene mejor pinta, lo que te falta es pedir al usuario una opción:
Cuando en la línea 9 preguntas qué operación realizar, lo que responda el usuario debe ir a la variable <opcion> y dicha variable no tiene que ser un array/vector. El array sería para almacenar a la vez todas las opciones (que eso es lo que tienes tú hecho en la línea 7). En tu caso debe ser una variable normal porque sólo contendrá 1 de esos 5 valores.
Y después de haber guardado la opción, es cuando hay que pedir los dos operandos. Los condicionales están bien, te faltaría hacer más para el resto de opciones, pero vas bien.

No sé si habrás visto el <switch>. Es otra estructura como el <if()> muy común para realizar menús y temas de opciones:
Código (cpp) [Seleccionar]

switch(opcion){ // Segun lo que vale opcion...
    case 1: // ...si vale 1...
        resultado = numero1 + numero2; // ...hace esto
        break; //...y Sale. Si no se pone el break haria tambien las instrucciones del case 2, del 3... hasta el default o hasta encontrar un break
    case 2:
        resultado = numero1 - numero2;
        break;
    // todos los case que quieras con su numero de opcion correspondiente
    default: // ...si opcion no vale ninguna de las cosas anteriores...
        cout << "La opcion no es valida" << endl; // ...muestra esto
    // Como despues del default ya no hay mas opciones, el break es opcional.
}



Como veo que eso ya lo llevas bastante bien, aprovecho para explicarte lo del bucle.
Lo normal es hacerlo con una estructura <do{} while()> pero si te mandan hacerlo con un <while()> también se puede adaptar.
Para ello hay que tener una condición que será la que determine si el programa se repite o no. En tu caso es 1=sale 0=repite. Esto se puede hacer con otra variable <int> por ejemplo llamada <salir> o con una variable de tipo <bool salir> que valdrá true/false (1/0).

Te hago un pequeño programa muy sencillo para que veas su uso y después aplicarlo tú a tu problema:
Código (cpp) [Seleccionar]

// ALTERNATIVA 1: Usando un int
int main(){
    int salir = 0; // le damos el valor 0 para que la primera vez que se ejecuta, funcione.

    // La condicion para finalizar el programa es que salir valga 1. Entonces el programa se repetira mientras salir sea distinto de 1:
    while(salir != 1){
        cout << "Hola" << endl;

        cout << "Desea salir: (1 = Si / 0 = No): ";
        cin >> salir;
    }
}

// ALTERNATIVA 2: Usando un bool de forma un poco rara
int main(){
    bool salir = false;

    while(!salir){ // esto es equivalente a decir: salir == false
        cout << "Hola" << endl;

        cout << "Desea salir: (1 = Si / 0 = No): ";
        cin >> salir; // Si no recuerdo mal, el 0 lo guardara como false y cualquier otro numero lo guardara como true
    }
}

//ALTERNATIVA 3: Usando un bool de forma mas facil de entender
int main(){
    bool salir = false;
    int respuesta; // para guardar la respuesta del usuario y no hacerlo directamente en bool

    while(!salir){
        cout << "Hola" << endl;

        cout << "Desea salir (1 = Si / 0 = No): ";
        cin >> respuesta;
        // Ahora si la respuesta vale 1, salir debe valer true y si vale 0, salir debe valer false
        salir = (respuesta == 1); // Asi valdra true cuando respuesta sea 1 y false en cualquier otro caso
    }
}


Como ves hay muchas formas de hacerlo y esto sólo usando el while(), si usas el <do while()> tendrás el doble de alternativas. Lo que todas tienen en común es que si el usuario no introduce ni 1 ni 0, el programa tomará una decisión según la alternativa.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

@XSStringManolo

#4
Lo primero de todo, el ejercicio te dice que utilices funciones. Una función podríamos decir que es un programa que puede funcionar de forma independiente al tuyo. Por ejemplo un programa que suma puede funcionar por si solo y cumplir su función de sumar sin necesidad de hacer nada más.
Debes hacer mínimo una función para cada operación básica. Y opcionalmente puedes utilizar alguna otra función para otra cosa. Por ejemplo una función para el menú. Después haces llamadas a dichas funciones.

Te hice el programa para que te orientes un poco. Ayuda bastante tener algún código de ejemplo de exactamente lo que quieres hacer. Todo lo que no entiendas búscalo en Google. Y si no te queda claro puedes hacer un post con todas tus dudas recopiladas.



Código (cpp) [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

/* Prototipos de funciones para avisar al compilador */
int Sumar(int numero1, int numero2);
int Restar(int numero1, int numero2);
int Multiplicar(int numero1, int numero2);
int Dividir(int numero1, int numero2);
int PedirNumero(string operacion);

/* Funcion principal */
int main()
{
cout << "Calculadora básica." << endl;

int opcionDelMenu = 1;


  while (opcionDelMenu !=0)
  {  

  cout << endl << "Opciones Disponibles:" << endl << "1. Sumar" << endl << "2. Restar" << endl << "3. Multiplicar" << endl << "4. Dividir" << endl << endl << "0. Salir" << endl << endl;

/* Comentario #1 */
opcionDelMenu = PedirNumero("seleccionar una opción");

/* Comentario #2 */
     switch (opcionDelMenu)
     {
        case 0:
        {
        cout << "Hasta Luego!" << endl;
        cin.ignore();
        cin.get();
        return 0;
        }
   
        case 1:
        {
       
        int num1 = PedirNumero("sumar");
        int num2 = PedirNumero("sumar");
        cout << "El resultado es: " << Sumar(num1, num2) << endl;
        } break;

        case 2:
        {
        int num1 = PedirNumero("restar");
        int num2 = PedirNumero("restar");
        cout << "El resultado es: " << Restar(num1, num2) << endl;
        } break;

        case 3:
        {
        int num1 = PedirNumero("multiplicar");
        int num2 = PedirNumero("multiplicar");
        cout << "El resultado es: " << Multiplicar(num1, num2) << endl;
        } break;

        case 4:
        {
        int num1 = PedirNumero("dividir");
        int num2 = PedirNumero("dividir");
        cout << "El resultado es: " << Dividir(num1, num2) << endl;
        } break;

        default:
        {
        cout << "La opción " << opcionDelMenu << " introducida no está contemplada" << endl;
        }

     }

  }


return 0;
}


/* Definición de Funciones */
int Sumar (int numero1, int numero2)
{
return numero1+numero2;
}

int Restar (int numero1, int numero2)
{
return numero1-numero2;
}

int Multiplicar (int numero1, int numero2)
{
return numero1 * numero2;
}

int Dividir (int numero1, int numero2)
{
return numero1/numero2;
}

int PedirNumero(string operacion)
{
int numero = 0;
cout << "Introduzca el numero para " << operacion << endl;
cin >> numero;
return numero;
}


Comentario #1:
Pudes guardar el valor de retorno de una función en una variable. Ejemplos con distintos parámetros:
int resultadoSuma = suma();

int resultadoResta = resta(3 , 2);

int resultadoMulti = multiplicacion(7, numero);

int resultadoDivision = dividir(resultadoMulti, resultadoSuma);

La sentencia: opcionDelMenu = PedirNumero("seleccionar una opción"); se compone de:
-La variable opcionDelMenu que fue declarada anteriormente.
-El operador de asignación = que asigna el return o resultado de la expresión a su derecha a la variable o contendor de su izquierda.
- La llamada a la función PedirNumero(); que está declarada al final del código. Al llamarla, se ejecuta el código que contiene. Esta llamada tiene como parámetro el texto entrecomillado "seleccionar una opción". Esto es un string literal. Es usado en el cout de la función. Esto es lo mismo que hacer lo siguiente:

string miTexto = "seleccionar una opción";
opcionDelMenu = PedirNumero(miTexto);



Comentario #2:
Utilizo un switch(parámetro) en lugar de varios if, else if, else.

Utilizando los if, else if y else sería:
Código (cpp) [Seleccionar]
if (opcionDelMenu == 0)
{
cout << "Hasta Luego!" << endl;
cin.ignore();
cin.get();
return 0;
}

else if (opcionDelMenu == 1)
{
int num1 = PedirNumero("sumar");
int num2 = PedirNumero("sumar");
cout << "El resultado es: " << Sumar(num1, num2) << endl;
}

else if (opcionDelMenu == 2)
{
int num1 = PedirNumero("restar");
int num2 = PedirNumero("restar");
cout << "El resultado es: " << Restar(num1, num2) << endl;
}

else if (opcionDelMenu == 3)
{
int num1 = PedirNumero("multiplicar");
int num2 = PedirNumero("multiplicar");
cout << "El resultado es: " << Multiplicar(num1, num2) << endl;
}

else if (opcionDelMenu == 4)
{
int num1 = PedirNumero("dividir");
int num2 = PedirNumero("dividir");
cout << "El resultado es: " << Dividir(num1, num2) << endl;
}

else
{
cout << "La opción " << opcionDelMenu << " introducida no está contemplada" << endl;
}


cin.ignore(); sirve para ignorar los caracteres que estén en el buffer.
cin.get(); es una forma de pausar el programa hasta que se introduzca un caracter. En algunos IDE como CodeBlocks se pausa automáticamente la consola para ver el resultado del programa hasta que pulses enter. Pero si vas a la carpeta del .exe (en caso de windows) generado y lo ejecutas, esta pausa no se produce. Por lo que utilizo cin.get para que el programa no finalice automáticamente y se pueda ver el mensaje de despedida.
Despues utilizo return 0; para finalizar la función int main() y por tanto el programa cuando se seleccione salir. Otra opción es utilizar la propia funcionalidad del while. Vacias el case 0: y le añades el break. De tal forma que salte al final del while, se compruebe que la condición del bucle ya no se cumple, y continue la ejecución hasta el return 0; que se encuentra en el final del cuerpo de la función main. Es más eficiente retornar 0 directamente desde case 0: pero no siempre va a ser el comportamiento que deseas. A veces quieres salir de un bucle, y entrar en otro bucle nuevo por ejemplo, y si hicieses el return 0 dentro del case 0: abandonarias el programa directamente sin continuar la ejecucción hasta el siguiente bucle.

Comentario Final:
Por último están declaradas todas las funciones del programa. Todas retornan un entero. En los cout dentro de los case puedes ver como están las llamadas a las funciones dentro del propio cout. cout << "El resultado es: " << Sumar(num1, num2) << endl; Como ves en la ejecución, Sumar(num1, num2) es remplazado por su valor de retorno.

Tambien puedes utilizar funciones sin retorno del tipo void. Ej:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>

using namespace std;

int vecesSaludado = 0;

void Saludo(string nomb);

int main()
{
string miNombre = "";
cout << "Hola cómo te llamas?" << endl;
cin >> miNombre;

Saludo(miNombre);
Saludo("Paco");
Saludo(miNombre);

int veces;
cout << "Cuantas veces quieres que te salude?" << endl;
cin >> veces;

for ( int i = 0; i < veces; ++i)
{
Saludo(miNombre);
}

cout << miNombre << " fuiste saludado " << vecesSaludado << " veces." << endl;


cin.get();
return 0;
}

void Saludo(string nomb)
{
cout << "Hola " << nomb << " bienvenido a mi programa." << endl << endl;

++vecesSaludado;
}


En el foro de dudas generales tienes un listado con libros. Si te manejas en inglés en concreto te recomiendo leer el del Apress Learn C++ for game developers.

yina07

Cita de: YreX-DwX en 24 Noviembre 2019, 18:27 PM



No sé si habrás visto el <switch>. Es otra estructura como el <if()> muy común para realizar menús y temas de opciones:




Hey, ya pude hacerlo, lo unico que me faltaria es ordenarlo un poco más y poner todo  el codigo dentro del while como me pidieron que lo haga, que intenté hacerlo y no me funcionaba no sé por qué, pero veo que el programa funciona como quería aunque el while esté al final. Gracias!

Código (cpp) [Seleccionar]


int numero1;
int numero2;

int resultado;

int opcion;

cout<<"Que operacion desea realizar?"<<endl;

cin>>opcion;
cout<<"Introduzca un valor"<<endl;
cin>>numero1;
cout<<"Introduzca otro valor"<<endl;
cin>>numero2;



switch(opcion){ .
    case 1:
        resultado = numero1 + numero2;
        break;
    case 2:
        resultado = numero1 - numero2;
        break;
       
        case 3:
        resultado = numero1 * numero2;
        break;
       
       
        case 4:
        resultado = numero1 / numero2;
        break;
   
    default:
        cout << "La opcion no es valida" << endl;
   
}


cout<<"El resultado es:"<<endl<<resultado<<endl;

// bucle while



    bool salir = false;
    int respuesta;

    while(!salir){
        cout << "Hola" << endl;

        cout << "Desea salir (1 = Si / 0 = No): ";
        cin >> respuesta;
       
        salir = (respuesta == 1);
}





K-YreX

Bueno a ver, hasta la línea 42 está bien. Pero el bucle... :xD :xD
Si te he puesto lo de:
Código (cpp) [Seleccionar]

bool salir = false;
int respuesta;

while(!salir){
    cout << "Hola" << endl;

    cout << "Desea salir (1 = Si / 0 = No): ";
    cin >> respuesta;

    salir = (respuesta == 1);
}

Era para que vieses un ejemplo sencillo de un programa que muestra "hola" cada vez que lo repites. Pero lo que tú quieres hacer no es que te muestre "hola" sino que te haga una operación con dos números.
A eso se refería tu profesor al decir que el programa debe ir dentro del <while()>.

En tu caso tendrías que coger TU PROGRAMA que es el que va de la línea 1 a la 43 y ponerlo donde está el "cout << "Hola" << endl;" de mi ejemplo.
El resultado sería el siguiente:
Código (cpp) [Seleccionar]

int main(){
    // Declaramos las variables antes del bucle porque si lo hacemos dentro las estaremos declarando cada vez que se repita el programa
    int numero1, numero2, resultado;
    int opcion;
    bool salir = false;

    while(!salir){
        cout<<"Que operacion desea realizar?"<<endl;
        cin>>opcion;

        cout<<"Introduzca un valor"<<endl;
        cin>>numero1;

        cout<<"Introduzca otro valor"<<endl;
        cin>>numero2;

        switch(opcion){ .
            case 1:
                resultado = numero1 + numero2;
                break;
            case 2:
                resultado = numero1 - numero2;
                break;
            case 3:
                resultado = numero1 * numero2;
                break;
            case 4:
                resultado = numero1 / numero2;
                break;
            default:
                cout << "La opcion no es valida" << endl;
        }
        cout << "El resultado es: " << resultado << endl;
        // AQUI TERMINA LO QUE SERIA TU PROGRAMA SIN REPETICIONES
        // Ahora ponemos la pregunta para repetir el programa
        cout << "Terminar programa (1 = Si / 0 = No): ";
        cin >> opcion; // podemos reutilizar la variable opcion para no tener que crear otra al principio. Si se crea otra tambien funciona bien
        salir = (opcion == 1);
    }
}

Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

yina07

Cita de: YreX-DwX en 24 Noviembre 2019, 22:03 PM


En tu caso tendrías que coger TU PROGRAMA que es el que va de la línea 1 a la 43 y ponerlo donde está el "cout << "Hola" << endl;" de mi ejemplo.
El resultado sería el siguiente:
Código (cpp) [Seleccionar]

int main(){
    // Declaramos las variables antes del bucle porque si lo hacemos dentro las estaremos declarando cada vez que se repita el programa
    int numero1, numero2, resultado;
    int opcion;
    bool salir = false;

    while(!salir){
        cout<<"Que operacion desea realizar?"<<endl;
        cin>>opcion;

        cout<<"Introduzca un valor"<<endl;
        cin>>numero1;

        cout<<"Introduzca otro valor"<<endl;
        cin>>numero2;

        switch(opcion){ .
            case 1:
                resultado = numero1 + numero2;
                break;
            case 2:
                resultado = numero1 - numero2;
                break;
            case 3:
                resultado = numero1 * numero2;
                break;
            case 4:
                resultado = numero1 / numero2;
                break;
            default:
                cout << "La opcion no es valida" << endl;
        }
        cout << "El resultado es: " << resultado << endl;
        // AQUI TERMINA LO QUE SERIA TU PROGRAMA SIN REPETICIONES
        // Ahora ponemos la pregunta para repetir el programa
        cout << "Terminar programa (1 = Si / 0 = No): ";
        cin >> opcion; // podemos reutilizar la variable opcion para no tener que crear otra al principio. Si se crea otra tambien funciona bien
        salir = (opcion == 1);
    }
}




Como te habia dicho, lo intente hacer así pero me daba errores, asi como lo pones sigue dando errores, empieza en el cout de la linea 8, probe borrandolo y sigue dando errores en la linea siguiente y así, ahí no se como arreglarlo realmente, me estuve fijando y no se que es lo que esta mal.

@XSStringManolo

#8
Se te coló un punto después del switch.

El compilador te dice exactamente que error estás comentiendo, la línea en la cual se encuentra, el motivo del error y algunos compiladores hasta el caracter que está causando el problema y como solucionarlo. Aprende a leer los errores.

Esta sentencia no sé si es válida.
salir = (opcion == 1);
Entiendo que (opcion == 1) es lo mismo que true, pero nunca ví utilizar expresiones así.

Si te da error ahí haz un if (opcion == 1) { salir = true; } else {salir = false;}
El else sobra pero por si lo modificas te lo dejo.

K-YreX

Cita de: yina07 en 24 Noviembre 2019, 23:05 PM
Como te habia dicho, lo intente hacer así pero me daba errores, asi como lo pones sigue dando errores, empieza en el cout de la linea 8, probe borrandolo y sigue dando errores en la linea siguiente y así, ahí no se como arreglarlo realmente, me estuve fijando y no se que es lo que esta mal.
Como te ha dicho @?0!,5^34, el error parece que es que hay un punto por ahí suelto en la línea del switch() (línea 17).
Si te da algún error más en las líneas del <cout> asegúrate de haber incluido la cabecera <iostream> y la línea "using namespace std;" porque son las encargadas de hacer que <cout>, <cin> y <endl> funcionen.


Cita de: @?0!,5^34 en 24 Noviembre 2019, 23:36 PM
Esta sentencia no sé si es válida.
salir = (opcion == 1);
Entiendo que (opcion == 1) es lo mismo que true, pero nunca ví utilizar expresiones así.

Si te da error ahí haz un if (opcion == 1) { salir = true; } else {salir = false;}
El else sobra pero por si lo modificas te lo dejo.
Y sobre esta sentencia, sí es válida. Como tú dices la comparación (opcion == 1) es una operación booleana por lo que el resultado sólo puede ser {true, false}. Dicho resultado se puede almacenar directamente en una variable como aparece ahí para ahorrarse los <if()>.
Es algo similar al operador ternario:
Código (cpp) [Seleccionar]

salir = (opcion == 1)?true:false;

pero que permite hacer la expresión todavía más sencilla.

Al final es lo mismo que cuando quieres hacer una función que devuelva un bool:
Código (cpp) [Seleccionar]

// La primera opcion seria:
bool esPar(int numero){
    bool par;
    if(numero % 2 == 0)
        par = true; // o bien hacer un return true
    else
        par = false; // y aqui un return false
    return par;
}

// La otra opcion un poco mas simple seria:
bool esPar(int numero){
    bool par = false;
    if(numero % 2 == 0)
        par = true;
    return par;
}

// Y la opcion aprovechando dicha propiedad quedaria:
bool esPar(int numero){
    return (numero % 2 == 0);
}

Al menos para mí parece más sencilla la última y más rápida de leer.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;