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