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

Rispondi quotando