The program skips a line of code ahead

Asked

Viewed 75 times

2

When I run the program below, do not ask me for the name of the malfunction and jump 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;
    }
}
  • I’m trying to run your code and I’m having trouble here, post your full code there please, I’m half out of time here, but I’ll try to help you.

1 answer

3


To call the getline after a cin >> ... you need to clean the buffer to remove the character of the new line that stood at the moment you pressed enter.

You can use a cin.ignore() for that reason:

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;
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.