pourquoi est-ce que quand je mets cin.clear()
puis cin.ignore()
le programme fonctionne parfaitement, ex: je mets chars
et le programme ne bug pas. Mais quand je mets cin.ignore()
d'abord puis cin.clear()
, le programme n'arrête pas d'envoyer des signaux d'erreur.Pourquoi l'ordre est-il important?
Comment ça marche?
l'entrée ne doit-elle pas être effacée et le fail flag
désactivé?
#include <iostream>
using namespace std;
class time
{
private:
int hours;
public:
void getime()
{
do
{
cout << "Enter hours: ";
cin >> hours;
if (hours < 0 || hours > 23 || cin.fail() )
{
cin.clear();
cin.ignore(10,'\n');
cerr << "invalid time, minutes must be between 0 and 59 " << endl;
}
}while(hours<0 || hours>23);
}
};
int main()
{
time asd;
asd.getime();
return 0;
}
Envisager de reformuler la question en "pourquoi" cout << "bonjour monde"; retour; 'fonctionne et pourquoi' retour; cout << "bonjour monde"; 'ne pas?" –
ouch, im noob, s'il vous plaît être doux hahah. – korek
@korek cin.clear() ne fait rien dans le buffer. Il réinitialise simplement les drapeaux. En tant que tel, il ne fait probablement pas ce que vous pensez qu'il fait. –