Dopo aver chiamato clear
, è necessario rimuovere in qualche modo l'input non valido dallo stream. Ecco un modo:
cin >> arr[index];
if (!cin)
{
cin.clear();
std::string ignoreLine; //read the invalid input into it
std::getline(cin, ignoreLine); //read the line till next space
index--;
continue;
}
E 'perché quando cin
non riesce a leggere l'input non valido, vi rimane nel flusso. Deve essere rimosso, con alcuni mezzi. Ho appena letto e ignorato.
È inoltre possibile utilizzare ignore
come:
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),' ');
che è meglio a mio parere fornito ingressi sono spazio separati (e se non si vuole ispezionare l'input non valido). Il online doc dice:
IStream :: ignorare
istream & ignorare (streamsize n = 1, int delim = EOF);
Estrarre e scartare caratteri
Estratti caratteri dalla sequenza di ingresso e li rigetti.
L'estrazione termina quando n caratteri sono stati estratti e scartati o quando viene trovato il carattere delim, a seconda di cosa si verifica per primo. In quest'ultimo caso, viene estratto anche il carattere delim stesso.
Quindi il ciclo infinito !! –
@ Mr.DDD: Esattamente. :-) – Nawaz
@ Mr.DDD: quale input non valido fornisci? – Nawaz