ciao a tutti,
non riesco a capire qual'è il problema.
Il seguente programma, non si ferma sulla parte in grassetto (1° blocco), dove dovrebbe prendere un input, e passa direttamente al codice in grassetto (2° blocco) all'interno del while.
Ovviamente nel while dovrebbe entarci solo se nel primo input non è stato inserito uno dei tre caratteri p, k, o l.
Chiaritemi questa cosa per favore

codice:
#include <iostream>#include <string>


using namespace std;


const int MAX_LENGTH_INGREDIENT_NAME = 20;
const int MAX_LENGTH_UNIT_OF_MISURE = 1;
const int SIZE_DISPENSA = 10;


struct ingrediente {
    char nome_ingrediente [20];
    int quantita = 0; //numero con virgola maggiore di 0
    char unitOfMisure [2]; //P = PEZZO  K = KILOGRAMMO  L = LITRO
};


ingrediente dispensa[10];


void inserisciIngredienti();




int main()
{
    inserisciIngredienti();


    return 0;
}


void inserisciIngredienti(){
    int quantita = 0;
    int counter = 0;
    bool isEscapeCharacter = false;




    do {
        cout<<"\n\tINSERIRE I DATI DEL "<<(counter+1)<<"° INGREDIENTE"<<endl;
        // input nome ingrediente
        cout<<"\nNome ingrediente: ";
        cin.getline(dispensa[counter].nome_ingrediente, 20);
        if(dispensa[counter].nome_ingrediente[0]=='.' && dispensa[counter].nome_ingrediente[1]=='\0'){
            isEscapeCharacter = true;
        } else {
            //input quantita ingrediente
            cout<<"\nQuantita' dell'ingrediente: ";
            cin >> dispensa[counter].quantita;
            if(dispensa[counter].quantita < 0)
                dispensa[counter].quantita = 0;
           
           //input unità di musura
            cout<<"\nUnita' di misura (Un carattere tra p, k, l): ";
            cin.getline(dispensa[counter].unitOfMisure, 2);

            if(dispensa[counter].unitOfMisure[0] != 'p' && dispensa[counter].unitOfMisure[0] != 'k' && dispensa[counter].unitOfMisure[0] != 'l'){
                while(dispensa[counter].unitOfMisure[0] != 'p' && dispensa[counter].unitOfMisure[0] != 'k' && dispensa[counter].unitOfMisure[0] != 'l'){
                    cout << "\nUNITA' DI MUSURA NON CORRETTA, INSERIRE NUOVAMENTE:";
                    cin.getline(dispensa[counter].unitOfMisure, 2);
                }
            }
        }
    }
    while(!isEscapeCharacter  && counter<SIZE_DISPENSA);


}