Quando cin incontra un input non può leggere correttamente nella variabile specificata (come l'immissione di un carattere in una variabile intera), entra in uno stato di errore e lascia l'input nel suo buffer.
Devi fare diverse cose per gestire correttamente questo scenario.
- È necessario verificare questo stato di errore.
- È necessario cancellare lo stato di errore.
- In alternativa, è necessario gestire i dati di input che hanno generato lo stato di errore, oppure svuotarlo e ripromettere l'utente.
Il seguente codice fornisce uno dei numerosi metodi per eseguire queste tre cose.
#include<iostream>
#include<limits>
using namespace std;
int main()
{
cout << "Enter an int: ";
int x = 0;
while(!(cin >> x)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Try again: ";
}
cout << "You enterd: " << x << endl;
}
si può solo passare in qualche grande valore alla cin.ignore come 1000 ed è probabile che si comportano esattamente lo stesso per tutti gli effetti.
È anche possibile testare cin dopo il tentativo di input e gestirlo in questo modo, ad esempio if (! Cin) {// ripulire l'errore}.
Partenza il riferimento istream per altre funzioni membro per gestire flusso di Stato: http://cplusplus.com/reference/iostream/istream/
Leggere tutto in una stringa e analizzare l'input di conseguenza? – Rhexis
Usa cin.get() e poi controlla il carattere EOF? – Ansari