error: jump to case label [-fpermisive]

0

Good night! I try to create a menu in c ++ in which the entered data can be read (reason of the fstream library); however, when trying to compile the program, mark the following error:

error: jump to case label [-fpermissive]

The code is as follows:

#include <iostream>
#include <fstream>

using namespace std;

typedef struct
{
    string nombre;
    string apellido;
    int edad;
    float estatura;
    bool activo;
    int codigo;
    float promedio;
    int fisica;
    int quimica;
    int mate;
}Datos;

int main()
{
    int noAlumnos=2;
    Datos Alumnos[noAlumnos];
    int opc,td;
    bool arregloLleno=false;
    cout << " MENU " << endl;
    cout << "1 Leer datos" << endl;
    cout << "2 Llenar arreglo" << endl;
    cout << "Elije una opcion: ";
    cin >> opc;
    cin.get();
    switch(opc)
    {
    case 1:
        ifstream fentrada("C:\Users\Maste\Desktop\Alumnos.dat", ios::in | ios::binary);
        fentrada.read(reinterpret_cast<char *>(&Alumnos), sizeof(Alumnos);
        fentrada.close();
        break;
    case 2:
        if(arregloLleno==false)
            {
                int i,edad,codigo,fisica,quimica,mate,promedio;
                float estatura;
                char activo;
                string nombre;
                string apellido;
                for(i=0;i<noAlumnos;i++)
                    {
                    cout << "Datos del alumno " << i+1 << endl;
                    cout << "Dame el nombre" << endl;
                    getline(cin,nombre);
                    cout << "Dame el apellido" << endl;
                    getline(cin,apellido);
                    cout << "Dame la edad" << endl;
                    cin >> edad;
                    cout << "Dame la estatura" << endl;
                    cin >> estatura;
                    cin.get();
                    cout << "El alumno esta activo? (S/N)" << endl;
                    cin >> activo;
                    if((activo=='s')||(activo=='S'))
                        {
                            Alumnos[i].activo=true;
                        }
                    else
                        {
                            Alumnos[i].activo=false;
                        }
                    cin.get();
                    cout << "Dame tu codigo" << endl;
                    cin >> codigo;
                    cout << "Dame tu calificacion de fisica" << endl;
                    cin >> fisica;
                    cout << "Dame tu calificacion de quimica" << endl;
                    cin >> quimica;
                    cout << "Dame tu calificacion de matematicas" << endl;
                    cin >> mate;
                    cin.get();
                    promedio=(fisica+quimica+mate)/3;
                    Alumnos[i].nombre = nombre;
                    Alumnos[i].apellido = apellido;
                    Alumnos[i].edad = edad;
                    Alumnos[i].estatura = estatura;
                    Alumnos[i].codigo = codigo;
                    Alumnos[i].fisica = fisica;
                    Alumnos[i].quimica = quimica;
                    Alumnos[i].mate = mate;
                    Alumnos[i].promedio = promedio;
                }
        arregloLleno=true;
        }
    else
        {
            cout << "Al arreglo ya se han asignado valores" << endl;
        }
    break;
    }
  }

I would like to know what the problem is and how to solve it. In advance, thank you.

    
asked by dannaobelana 08.12.2017 в 04:00
source

1 answer

1

Use {} in cases

 case 2:{
 if(arregloLleno==false)
            {
                int i,edad,codigo,fisica,quimica,mate,promedio;
                float estatura;
                char activo;
                string nombre;
                string apellido;
                for(i=0;i<noAlumnos;i++)
                    {
                    cout << "Datos del alumno " << i+1 << endl;
                    cout << "Dame el nombre" << endl;
                    getline(cin,nombre);
                    cout << "Dame el apellido" << endl;
                    getline(cin,apellido);
                    cout << "Dame la edad" << endl;
                    cin >> edad;
                    cout << "Dame la estatura" << endl;
                    cin >> estatura;
                    cin.get();
                    cout << "El alumno esta activo? (S/N)" << endl;
                    cin >> activo;
                    if((activo=='s')||(activo=='S'))
                        {
                            Alumnos[i].activo=true;
                        }
                    else
                        {
                            Alumnos[i].activo=false;
                        }
                    cin.get();
                    cout << "Dame tu codigo" << endl;
                    cin >> codigo;
                    cout << "Dame tu calificacion de fisica" << endl;
                    cin >> fisica;
                    cout << "Dame tu calificacion de quimica" << endl;
                    cin >> quimica;
                    cout << "Dame tu calificacion de matematicas" << endl;
                    cin >> mate;
                    cin.get();
                    promedio=(fisica+quimica+mate)/3;
                    Alumnos[i].nombre = nombre;
                    Alumnos[i].apellido = apellido;
                    Alumnos[i].edad = edad;
                    Alumnos[i].estatura = estatura;
                    Alumnos[i].codigo = codigo;
                    Alumnos[i].fisica = fisica;
                    Alumnos[i].quimica = quimica;
                    Alumnos[i].mate = mate;
                    Alumnos[i].promedio = promedio;
                }
        arregloLleno=true;
        }
    else
        {
            cout << "Al arreglo ya se han asignado valores" << endl;
        }
   }
    break;
    
answered by 08.12.2017 / 04:31
source