Linie Im Moment habe ich diese Funktion:While-Schleife überspringt
double GrabNumber() {
double x;
cin >> x;
while (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "You can only type numbers!\nEnter the number: ";
cin >> x;
}
return x;
}
Sein Zweck ist zu prüfen, ob x
eine gültige Zahl ist, zurückkehr es, wenn sie gültig ist oder sich wiederholende cin >> x
, wenn es nicht ist.
Es während dieser Funktion aufgerufen wird:
void addition() {
cout << "\nEnter the first number: ";
double a = GrabNumber();
cout << "Enter the second number: ";
double b = GrabNumber();
// rest of code
Wenn ich schreibe zum Beispiel „6+“, wenn er mir sagt, die erste Nummer einzugeben, sie es akzeptiert, aber in die zweite Zeile geht sofort und nennt es ein Fehler, wo ich nicht einmal meine Eingabe eingegeben habe.
Ich nehme an, dies liegt daran, dass der erste Eingang nur "6" akzeptiert, während "+" zum zweiten Eingang geht und einen Fehler zurückgibt. Daher muss ein Problem mit den Parametern while
vorliegen.
Ich denke, Sie müssen ['getline'] (http: // www .cplusplus.com/reference/string/string/getline /) und analysiere die komplette Zeile, anstatt "cin" so zu verwenden – Garf365
Aber Getline liest als String –