Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/02/2011, 18:37
cabeto14
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 14 años, 5 meses
Puntos: 0
problema con getline

hola a toda la comunidad.. tengo el siguiente codigo c++
Código:
# include <iostream>
# include <string>
using namespace std;
void primeraClase(int[]);
void claseEconomica(int[]);
void imprimirpasaje(string,int,int);
int main ()
{
    const int tamanio=10;
    int cupos[tamanio]={}; //inicializa todo los puestos en 0
    int opcion=0;
    cout<<"\n\n\t Reservacion \n\n"; //menu
    while (opcion!=3)
    {
        cout<<"\n por favor escriba:\n"<<"1 para primera clase";
        cout<<"\n 2 para clase economico";
        cout<<"\n 3 pasa salir";
        cout<<"\n que opcion elige: ";
        cin>>opcion;
        switch(opcion)
        {
            case 1:
            primeraClase(cupos);
            break;
            case 2:
            claseEconomica(cupos);
            break;
            case 3:
            cout<<"\n\n\t Gracias por usar nuestro Servicio\n\n";
            break;
            default:
            cout<<"\n Porfavor escriba una entrada valida \n";
            opcion=0;
        }
    }
    return 0;

}
void primeraClase(int arreglo[])
{

    int a=1; //contador de puestos ocupados
    cout<<"hacientos disponibles: "; //muestra los lugares disponibles
    for (int i=0;i<5;i++)
        {
            if (arreglo[i]==0)
            {
                cout<<i+1<<", ";
            }
            else
            {
                a++;
            }
        }
    if (6==a) //si todos los puestos estan ocupados
    {
        char op;
        cout<<"\n no hay cupo, desea viajar en la clase economica (s/n): "; //propone traslado a clase economica
        cin>>op;
        if (op=='s')
        claseEconomica(arreglo);
        else
        cout<<"\n el proximo vuelo sera dentro de 3 horas \n";
    }
    else //si hay puestos disponibles
    {
        int puesto;
        cout<<"que puesto desea: ";
        cin>>puesto;
        while ((arreglo[puesto-1]==1)||(puesto>5)) //compruba que el puesto este disponible y que sea correcto
        {
            cout<<"\n puesto ocupado o no valido, elija otro: ";
            cin>>puesto;
        }
        arreglo[puesto-1]=1;
        string nom;
        cout<<"\n escriba su nombre: ";
        getline(cin,nom);
        imprimirpasaje(nom,puesto,1);
    }
}
void claseEconomica(int array[])
{
    int a=1; //contador de puestos ocupados
    cout<<"hacientos disponibles: "; //muestra los lugares disponibles
    for (int i=5;i<10;i++)
        {
            if (array[i]==0)
            {
                cout<<i+1<<", ";
            }
            else
            {
                a++;
            }
        }
    if (6==a) //si todos los puestos estan ocupados
    {
        char op;
        cout<<"\n no hay cupo, desea viajar en primeraClase (s/n): "; //propone traslado a primera clase
        cin>>op;
        if (op=='s')
        primeraClase(array);
        else
        cout<<"\n el proximo vuelo sera dentro de 3 horas \n";
    }
    else //si hay puestos disponibles
    {
        int puesto;
        cout<<"que puesto desea: ";
        cin>>puesto;
        while ((array[puesto-1]==1)||(puesto<6)) //compruba que el puesto este disponible y sea correcto
        {
            cout<<"\n puesto ocupado o no valido, elija otro: ";
            cin>>puesto;
        }
        array[puesto-1]=1;
        string nombre;
        cout<<"\n escriba su nombre: ";
        getline(cin,nombre);
        imprimirpasaje(nombre,puesto,2);
    }
}
void imprimirpasaje(string name,int indice,int seccion)
{
    cout<<"\n\n";
    cout<<"================================================"<<endl
        <<"                                                "<<endl
        <<"                   Pasaje                       "<<endl
        <<"                                                "<<endl
        <<"Nombre: "<<name<<"                              "<<endl;
        if (1==seccion)
    cout<<"Sección: Primera Clase                          "<<endl;
        else
    cout<<"Sección: Segunda Clase                          "<<endl;
    cout<<"                                                "<<endl
        <<"Puesto: "<<indice<<"                            "<<endl
        <<"                                                "<<endl
        <<"================================================";
}
el programa me compila bien pero en ejecucion no me lee el nombre (string). es muy raro porque si pongo las instrucciones (declaracion del nombre y lectura) al inicio de main el programa lo lee.. que pude ser??

gracias