Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Salta l'input da riga

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88

    Salta l'input da riga

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

  2. #2
    Il cin lascia '\n' nel buffer e getline quindi finisce per leggere solo quello.
    Si risolve svuotando il buffer tramite la funzione ignore
    codice:
    //...
     cout<<"\nQuantita' dell'ingrediente: ";
                cin >> dispensa[counter].quantita;
                cin.ignore();
                if(dispensa[counter].quantita <0)
                    dispensa[counter].quantita =0;
    //...
    http://www.cplusplus.com/forum/general/51433/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.