Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mistaiker en 27 Agosto 2011, 15:07 pm



Título: Case label '#' not within a switch statement
Publicado por: mistaiker en 27 Agosto 2011, 15:07 pm
Hola a todos y desde ya muchas gracias por leer.
Practicando un programmilla en c++ no me toma los case, y lo revise y lo compare
con el original y no le veo el error

Código:
//Simulacion de una calculadora

//Preprosesador
#include <iostream>
#include <limits>

using namespace std;

//Declaracion de funciones
int menu(void);
double leerDato();


//Funcion principal
int main()
{

    double dato1 = 0, dato2 = 0, resultado = 0;
    int operacion = 0;

    while(true)
    {
        operacion = menu();
        if(operacion != 5)
        {
            //leer datos
            cout << "Ingrese dato1: "; cin >> dato1;
            cout << endl <<"Ingrese dato2: "; cin >> dato2;

            //realizar la operacion
            switch(operacion)
                case 1:
                    resultado = dato1 + dato2;
                    break;
                case 2:
                    resultado = dato1 - dato2;
                    break;
                case 3:
                    resultado = dato1 * dato2;
                    break;
                case 4:
                    if(dato2 == 0)
                        {
                            cout << "El divisor no puede ser 0" << endl;
                        }
                        else
                        {
                            resultado = dato1 / dato2;
                            break;
                        }
        }
    }


}

int menu()
{
    int op;

    cout << "Sumar - |" << endl;
    cout << "Restar - 2" << endl;
    cout << "Multiplicar - 3" << endl;
    cout << "Dividir - 4" << endl;
    cout << "Salir - 5" << endl;

    cout << "Seleccione la operacion deseada: ";
    op = static_cast<int>(leerDato());

    while(op < 1 || op > 5)
    {
        return op;
    }
}

double leerdato()
{

    double dato = 0.0;
    cin >> dato;

    while(cin.fail()) // si el dato es incorrecto limpiar el buffer y volverlo a leer
    {
        cout << '/a';
        cin.clear();
        cin.ignore(numeric_limits<int>::max(), '/n');
        return dato;
    }

}


Título: Re: Case label '#' not within a switch statement
Publicado por: mistaiker en 27 Agosto 2011, 15:16 pm
Ya lo solucione, me avia comido con corchete. Pero ahora me dice undefine reference to 'leerDato()'


Título: Re: Case label '#' not within a switch statement
Publicado por: Queta en 27 Agosto 2011, 15:17 pm
Faltan las llaves al switch (http://www.cplusplus.com/doc/tutorial/control/ (http://www.cplusplus.com/doc/tutorial/control/)). Por cierto, todas las funciones que tienes declaradas deben devolver un valor; la función menu tiene que devolver un número entero al igual que la función leerDato y por supuesto main.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: Case label '#' not within a switch statement
Publicado por: mistaiker en 27 Agosto 2011, 15:27 pm
Solucionado, faltaba mayuscula.


Título: Re: Case label '#' not within a switch statement
Publicado por: Queta en 27 Agosto 2011, 15:35 pm
También. A propósito, fíjate aquí:

Código
  1. cout << '/a';
  2. cin.clear();
  3. cin.ignore(numeric_limits<int>::max(), '/n');

Supongo que /a y /n los utilizas como secuencias de escape. En este caso estaría mal, dado que la barra vertical es al revés (\a y \n).