Ich habe ein Programm, das die Fähigkeit hat, Benutzereingaben zu verwerfen, wenn ein Zeichen anstelle eines int eingegeben wird, und das funktioniert fast perfekt - alles eingegeben, das keine Nummer ist, wird zurückgewiesen.Wie man char-Eingaben in cin zurückweist und minimale und maximale int-Werte definiert?
Allerdings müssen alle diese cin s jeden Wert zwischen einem Minimum und einem Maximum akzeptieren, aber ich kann es nicht zum Funktionieren bringen. Der Code unten zeigt meine bisherigen Bemühungen, aber es gibt einen kleinen Fehler. Wenn ein Char eingegeben wird, gefolgt von einem int, der außerhalb des Bereichs ist, und ein anderer char eingegeben wird (Ich möchte rigoros testen - ich meine, wer weiß, was passieren könnte, wenn ein tatsächlicher Endbenutzer über die Problem) das Programm wirft den Endwert von hypothekenTerm heraus als 0.
Könnte mir jemand sagen, wo ich falsch liege und mir irgendwelche Hinweise geben, um mir zu helfen, es zu beheben? Vielen Dank im Voraus an alle, die mir helfen können, mein Problem zu lösen!
int mortgageTerm;
string line;
cout << "Mortgage term (1 - 40 years) : ";
while (!(cin >> mortgageTerm))
{
cout << "That's not a valid choice! Try again : ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
while (getline(cin, line))
{
stringstream linestream;
if (!linestream >> mortgageTerm)
{
cout << "Input was not a number! Try again : ";
cin >> mortgageTerm;
continue;
}
if ((mortgageTerm <= 0 || mortgageTerm > 40))
{
cout << "Input out of range. Try again : ";
cin >> mortgageTerm;
continue;
}
char errorTest;
if (linestream >> errorTest)
{
cout << "Invalid input. Try again : ";
cin >> mortgageTerm;
continue;
}
break;
}
cout << mortgageTerm;
ziemlich ein dupe [dieser] (http://stackoverflow.com/questions/10828937/how-to-make- cin-take-only-numbers), aber es macht keine Bereichsüberprüfung (ziemlich trivial hinzuzufügen). – NathanOliver
@NathanOliver yeah das ist das, das gerade im Programm ist, ich habe Bug checked, als ich merkte, dass ich ein Problem losgeworden war und ein anderes in Form von Bereichsüberprüfung –