Originariamente inviato da shodan
Non è un bug, anche se appare come tale. Semplicemente il cin va in errore.
Si può risolvere così:
Per evitare di incasinare tutti i cicli del genere con la logica di gestione degli errori di solito uso questa funzione:
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 primo overload:
codice:
int intero;
AcquireInput(cout,cin,"Inserisci un numero intero: ",intero);
Utilizzo del secondo overload:
codice:
int intero=AcquireInput(cout,cin,"Inserisci un numero 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.
Originariamente inviato da Zahami
Se usi Windows ti consiglio DevC++, io ora uso Linux e quando ero su Windows usavo quello, per me è ottimo!
'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++).