Besondere Abbruchbedingung / Tastatur Eingabe
-
Hallo,
ich brauche eine Abbruchbedingung, die das Einlesen von int Werten beendet und das weitere Programm durchläuft.
Abburchbedingungen sollen sein:
- Keine INTEGER Zahl eingegeben.
- Wenn nur Return gedrückt wird, soll auch abgebrochen werden.Zulässige Eingaben z.B 12, +5, -67
Unzulässige Eingaben z.B. a, 34c, 34.45, Leerzeichen, nur Return.Im Endeffekt sollen aus allen eingegebenen Zahlen der Durchschnitt ermittelt werden. Diese Berechung soll sofort ohne Meldung bei einer falschen Eingabe gestartet werden.
Mit scanf kann ich leider nicht die "Return" Abbruchbedingung erfüllen.
Hat jemand eine Idee dazu ?
Thanks RubDec
-
Vielleicht ist es ne Idee, die Zeichen bis zum nächsten Return einzeln einzulesen,z.b. in ein char array, und dann die abbruchbedingungen zu überprüfen.
Wenn zum beispiel was anderes als 0-9,+,- eingegeben wurde und + oder - nicht vorne am anfang stehen oder alleine, oder wenn nur enter gedrückt wurde. wenn du dann ein gültiges char array hast, lässt sich das ja dann ganz leicht in einen intwert umwandeln mittels funktion atoi()
-
such im Forum mal nach strtod
-
Hallo erst mal Danke für die Tipps. Aber ich kriegs einfach ned hin. Kann jemand von euch mal ein Codebeispiel posten ?
Mein Versuch
int main() { unsigned int n = 0; int zahl; float summe= 0.0; float ergebnis; while (scanf("%d\n", &zahl) == 1) { summe+= zahl; ++n; } ergebnis= summe/n; printf("Durchschnitt: %f\n",ergebnis); return 0; }
So gehts, aber nur wenn der User die richitgen Zahlen eingibt
Gibt jemand die Ziffer 4, 6, und 8a ein, bricht er zwar ab und berechnet, aber nimmt die letzte 8 noch dazu --> Ergebniss = 6 sollte aber 5 sein, da er nur die ersten beiden Zahlen nehmen soll.
Außerdem soll er auch rechnen, wenn jemand nur RETURN drückt ohne ein Zahl eingegeben zu haben.
-
Mit scanf geht das nicht da es immer so lange konvertiert bis der Wert umgesetzt ist, bzw eine nicht konvertierbares Zeichen auftritt, deswegen hatte ich auf strtod hingewiesen
Allerdings ziehe ich sttod vor
Diese Lösung wandelt eine Eingabe in eine float Zahl um. wenn der Eingabe string keine Zahl oder nach dem Ende der Zahl noch weitere
Zeichen enthält zeigt *err nicht auf '\0' und man weis das ein Fehler aufgetreten istchar* err; double umwandlung; // teste ob die Eingabe return ist falls nein umwandlung = strtod( zahl, &err, 10 ); /* 10 ist die basis des zahlensystems */ if ( *err != '\0' ) { printf("Zahl ist keine float"}; }