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!! 🙂


  • Mod

    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.


Anmelden zum Antworten