Per evitare di incasinare tutti i cicli del genere con la logica di gestione degli errori di solito uso questa funzione:Originariamente inviato da shodan
Non è un bug, anche se appare come tale. Semplicemente il cin va in errore.
Si può risolvere così:
Utilizzo del primo overload:codice:#include <limits> #include <cmath> //... template<class inType> void AcquireInput(ostream & Os, istream & Is, const string & Prompt, inType & Result) { do { Os<<Prompt.c_str(); if(Is.fail()) { Is.clear(); Is.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } Is>>Result; } while(Is.fail()); } template<class inType> inType AcquireInput(ostream & Os, istream & Is, const string & Prompt) { inType temp; AcquireInput(Os,Is,Prompt,temp); return temp; }
Utilizzo del secondo overload:codice:int intero; AcquireInput(cout,cin,"Inserisci un numero intero: ",intero);
; il vantaggio del primo overload è che evita di costruire oggetti temporanei (il che potrebbe non essere desiderabile in alcuni casi), ma il secondo è molto più comodo in diverse occasioni.codice:int intero=AcquireInput(cout,cin,"Inserisci un numero intero: ");
'nzomma... è vecchio, non viene più mantenuto e ha diversi bug. Su Windows uno degli IDE migliori è Visual C++, non è male anche Code::Blocks (sicuramente meglio di Dev-C++).Originariamente inviato da Zahami
Se usi Windows ti consiglio DevC++, io ora uso Linux e quando ero su Windows usavo quello, per me è ottimo!

Rispondi quotando