The program jumps a line of code forward

2

When I run the program below, it does not prompt me for the name of the malfunction and jumps right to the description.

  void gestor::addavaria()
{
    setlocale(LC_ALL, "portuguese");

    int opc;
    string descricao;
    string nome;
    int tipo;
    opc = submenu();
    avaria*av = NULL;
    switch (opc)
    {
    case 1:
        cout << "Introduza o tipo de avaria!" << endl;
        cin >> tipo;
        cout << " Introduza o nome da avaria!" << endl;
        getline(cin, nome);
        cout << "Introduza a descrição da avaria!" << endl;
        getline(cin,descricao);
        av = new avaria (tipo,nome,descricao);
        break;
    case 2:
        cout << "nada!\n" << endl;
        break;

    default:
        break;
    }
}
    
asked by anonymous 02.10.2015 / 17:25

1 answer

3

To call the getline after a cin >> ... you need to clear the buffer to remove the newline character that stayed the moment you pressed enter .

You can use a cin.ignore() for this:

void gestor::addavaria()
{
    setlocale(LC_ALL, "portuguese");

    int opc;
    string descricao;
    string nome;
    int tipo;
    opc = submenu();
    avaria*av = NULL;
    switch (opc)
    {
    case 1:
        cout << "Introduza o tipo de avaria!" << endl;
        cin >> tipo;
        cin.ignore(); // Alteração aqui.
        cout << " Introduza o nome da avaria!" << endl;
        getline(cin, nome);
        cout << "Introduza a descrição da avaria!" << endl;
        getline(cin,descricao);
        av = new avaria (tipo,nome,descricao);
        break;
    case 2:
        cout << "nada!\n" << endl;
        break;

    default:
        break;
    }
}
    
02.10.2015 / 17:40