Filtern einer Division durch 0 / Problem mit der Eingabeüberprüfung
-
Hallo liebe Gemeinde,
ich mache gerade ein C Tutorial durch. Nun kam das Kapitel "Selbstkontrolle". Soweit habe ich auch kein Problem, nur mit einem kleinen Teil der Aufgabenstellung:
SELBSTKONTROLLE
Schreiben Sie ein Programm das über eine Auswahl eine bestimmte Physikalische
Größe berechnet. Überprüfen Sie vorher die Eingabe. Filtern Sie außerdem eine
Division durch 0 heraus.
Beispiel:
Was moechten Sie berechnen?
1...Weg
2...Geschwindigkeit
3...Zeit
Auswahl --> 1
Sie haben die Berechnung von dem Weg gewaehlt.
Geschwindigkeit (km/h) -> 50
Zeit (Minuten) -> 60
Mit einer Geschwindigkeit von 50 km/h und einer Zeitdauer von
60 Minuten kommen sie 120.00 km.
Hinweis:
Verwenden Sie für dieses Beispiel die Anweisung Switch-Case.Ok, die Überprüfung der Eingabe mache ich mit if / else, so wie gelernt (wenn auch nicht unbedingt sinnvoll, so wie das dort gemacht wird). Seitdem bekomme ich immer meine "else"-Ausgabe. Danach soll ich noch die Division durch 0 Filtern.. Mache ich das auch wieder mit einer if schleife? Wir haben die nämlich wirklich komisch gelernt!
Naja, hier mal der code:
#include <stdio.h> #include <stdlib.h> int main() { int auswahl, ok; char dummy; printf("Was moechten Sie berechnen?\n"); printf("Weg...1\n"); printf("Geschwindigkeit...2\n"); printf("Zeit...3\n"); printf("Ihre Wahl: "); ok = scanf("%d&c", &auswahl, &dummy); if (ok == 2 && dummy == '\n') { switch (auswahl) { int v,t,s,tinM,ergebnis; case 1: printf("\nSie moechten den Weg berechnen!\n"); printf("Geben Sie die Geschwindigkeit ein (km/h) --> "); scanf("%d", &v); printf("Geben Sie die Zeit ein (Minuten) --> "); scanf("%d", &t); tinM = t / 60; ergebnis = v * tinM; printf("Das Ergebnis ist %d km", ergebnis); break; case 2: printf("\nSie moechten die Geschwindigkeit berechnen!\n"); printf("Geben Sie die Strecke ein (km) --> "); scanf("%d", &s); printf("Geben Sie die Zeit ein (Minuten) --> "); scanf("%d", &t); tinM = t / 60; ergebnis = s / tinM; printf("Das Ergebnis ist %d km/h", ergebnis); break; case 3: printf("\nSie moechten die Zeit berechnen!\n"); printf("Geben Sie die Strecke ein (km) --> "); scanf("%d", &s); printf("Geben Sie die Geschwindigkeit ein (km/h) --> "); scanf("%d", &v); ergebnis = ((s / v) * 60); printf("Das Ergebnis ist %d Minuten", ergebnis); break; } } else { printf("Falsche Eingabe!"); } return 0; }
Falls es jemanden interessiert, meine if / else Konstruktion bezieht sich auf den Code / die Erklärungen aus dem Tutorial: http://youtu.be/sWvAYJChjU4?t=3m26s
Danke!!
-
Nochmal genau angucken:
ok = scanf("%d&c", &auswahl, &dummy);
Da stimmt was nicht. Schalte zudem mal Compilerwarnungen an, den Fehler hier kann der Compiler durchaus erkennen, er meldet ihn nur nicht, weil es, streng genommen, korrektes C ist.
Was das mit dem dummy überhaupt? Mach
ok = scanf("%d", &auswahl);
und gut ist.