- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: switch-case-Abfrage beim Minitaschenrechner

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.08.2010
    Beiträge
    16

    switch-case-Abfrage beim Minitaschenrechner

    Hallo an alle,
    ich habe ein Problem mit meinem Programm das als Minitaschenrechner eingesetzt werden soll. Bei der switch-case-Abfrage meckert mein Compiler und sagt, ich solle a, m, d, s und b deklarieren, obwohl die nur verglichen werden sollen. Weiß jemand von euch, was ich falsch gemacht habe?

    Code:
    #include <stdio.h>
    
    void main(void)
    {
    double zahl1, zahl2;
    char auswahl;
    printf("\nMini-Taschenrechner\n");
    printf("-----------\n\n");
    do
    {
    printf("\nBitte geben Sie die erste Zahl ein: ");
    scanf("%lf", &zahl1);
    printf("Bitte geben Sie die zweite Zahl ein: ");
    scanf("%lf", &zahl2);
    printf("\nZahl (a) addieren, (s) subtrahieren, (d) dividieren oder (m) multiplizieren?");
    printf("\nZum Beenden wählen Sie (b)");
    scanf("%c",&auswahl);
    switch(auswahl)
    {
     case a:
     printf("Ergebnis: %lf", zahl1 + zahl2);
     break;
     case s:
     printf("Ergebnis: %lf", zahl1 - zahl2);
     break;
     case d:
     if(zahl2 == 0)
     printf("Division durch 0 nicht möglich!");
     else
     printf("Ergebnis: %lf", zahl1 / zahl2);
     break;
     case m:
     printf("Ergebnis: %lf", zahl1 * zahl2);
     break;
     case b:
     break;
     default:
     printf("Fehler: Diese Eingabe ist nicht möglich!");
     break;
    }
    }
    while(auswahl != b && auswahl != b);
    getchar();
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Naja, die Compilerwarnung stimmt schon. Es gibt nirgendwo Variablen, die sich a, s, d. ... nennen.
    Wenn du den Inhalt von "auswahl" willst, brauchst du ' ' aussenrum ('a').

    Wobei mich das wundert, dass vom Compiler hier nicht mehr kommt; Case mit variablen Werten... wäre mir neu, dass das geht. Aber ich glaub, die Warnung/Error kommt dann, wenn es a, s, d, ... tatsächlich geben würde.
    #ifndef MfG
    #define MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.08.2010
    Beiträge
    16
    Vielen Dank, damit wird das Programm schon mal ausgeführt. Ich hatte schon mehrere Varianten ausprobiert, aber die ist mir wohl durch die Lappen gegangen. Jetzt wird das Programm ausgeführt, aber nach der Buchstabeneingabe bekomme ich jedesmal die Meldung "Fehler: Diese Eingabe ist nicht möglich", also die default-Anweisung, egal was ich eingebe. Noch eine Idee woran das liegen könnte?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Lass dir mal im default-Zweig anzeigen, was der da empfangen hat.
    Also sowas wie
    printf("Fehler: Diese Eingabe ist nicht möglich! Eingabe war: %c (0x%2X)", auswahl, auswahl);

    Dann sieht man, was der da tatsächlich kriegt.
    #ifndef MfG
    #define MfG

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    10.08.2010
    Beiträge
    16
    Dann kommt "Eingabe war: (0x A)"
    Hilft das?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    0xA (bzw. 0x0A) ist der Line Feed; also irgendwer scheint hier ne Enter-Taster o.ä. reinzuschieben.
    Ich kenn die Funktion scanf jetzt nicht so gut (eigentlich nie verwendet), aber wartet die hier bei der Eingabe auf ein Enter oder springt die gleich weiter, wenn a, m, s gedrückt wird?
    #ifndef MfG
    #define MfG

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    10.08.2010
    Beiträge
    16
    Nach der Eingabe des Buchstabens muss ich Enter drücken, damit etwas passiert. Das heißt also dass der Buchstabe gar nicht eingelesen wird oder wie?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Das heisst dann, dass das letzte gedrückte Char (In dem Fall der Line Feed vom CRLF beim Druck auf Enter) ausgewertet wird.
    Kann sein, dass das so ne Eigenart von scanf ist.

    Mit "auswahl = getchar();" müsste das dann aber eigentlich klappen. getchar wartet ja auch auf nen Tastendruck, sollte aber die davor gedrückten Zeichen zurückgeben.
    #ifndef MfG
    #define MfG

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    10.08.2010
    Beiträge
    16
    Entschuldigung... aber wo muss ich auswahl = getchar eintragen?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    An die Stelle, wo du eigentlich mit scanf den Buchstaben abfragst.
    #ifndef MfG
    #define MfG

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests