Por que o cin.clear () corrige um loop infinito causado pela entrada incorreta no cin?
Eu escrevi uma declaração switch, e criei um padrão que simplesmente diria que o usuário escolheu uma opção ruim e repita a entrada. Eu queria ter certeza de que, se houvesse um problema, ele limparia o buffer primeiro, então usei cin.sync (), mas inserir um 'a' para a entrada ainda causava um loop infinito. Eu adicionei cin.clear () para limpar as bandeiras que me deram código de trabalho ... mas minha confusão é porque funcionou. O cin.sync () não funciona se houver um sinalizador de falha?
a declaração segue, truncada por brevidade:
while(exitAllow == false)
{
cout<<"Your options are:\n";
cout<<"1: Display Inventory\n";
/*truncated*/
cout<<"5: Exit\n";
cout<<"What would you like to do? ";
cin.clear(); //HERE IS MY CONFUSION//
cin.sync();
cin>>action;
switch(action)
{
case 1:
/*truncated*/
case 5:
exitAllow = true;
break;
default:
cout<<"\ninvalid entry!\n";
break;
}
}