GELöST „verpasste die Rückkehr nach der Schleife nach einem korrekten Wert eingegeben wurde“C++ Funktion gibt nan statt Doppel
Ich benutze scanf_s Eingabe von der Konsole zu erhalten. Ich schrieb eine Funktion, die die Eingabe überprüft, und wenn sie falsch ist, fordert sie eine erneute Eingabe an.
Wenn ich einen korrekten Wert das erste Mal alles in Ordnung ist. Wenn ich den Wert ein zweites Mal innerhalb der Funktion eingeben muss, ist alles in Ordnung, aber anstatt diesen Wert zurückzugeben, gibt die Funktion NaN zurück. Warum geht der doppelte Wert nur dann verloren, wenn ich scanf_s zweimal verwende?
Wenn ich die Eingabe aufrufen und einen korrekten Wert eingeben, wird ein Doppel zurückgegeben. Wenn ich einen Wert kleiner oder gleich 0 gebe, muss ich den Wert erneut eingeben, aber diesmal wird NaN zurückgegeben. Beim Debuggen kann ich sehen, dass Eingabe noch ein Double ist.
double input() {
int n = -1;
double eingabe = 0.0;
scanf_s("%lf", &eingabe);
clearBuffer();
if (eingabe <= 0.0)
{
do
{
printf("Invald input");
printf("Try again: ");
n = scanf_s("%lf", eingabe);
clearBuffer();
} while (eingabe <= 0.0);
}
else
{
return eingabe;
}
}
void clearBuffer() {
//alles aus dem Buffer lesen bis man bei EOF (END OF FILE) ankommt
int c;
while ((c = getchar()) != EOF) {
if (c == '\n')
break;
}
}
Wenn Sie als C++ kompilieren, warum nicht 'std :: cin' anstelle von' scanf_s' und 'std :: cout' anstelle von' printf' verwenden? –
Was hat Ihr Debugger Ihnen gesagt? Haben Sie gesehen, dass Ihre Rückmeldung wie erwartet getroffen wurde? – UKMonkey
Follow up - Hat Ihr Compiler Sie über Ihre Funktion input() gewarnt? – UKMonkey