Problem mit Case in einem simplen Programm



  • Moin zusammen 🙂

    Ich habe ein Problem, zu dem ich nicht recht weiter weiß. Das Problem ist aber auch, dass ich nicht wirklich weiß, wie ich danach googeln könnte... Ich hoffe, jemand von euch kann mich da schlauer machen.
    Ich stehe noch ganz weit am Anfang der C-Programmierung und habe als Aufgabe erhalten, dass wir ein Programm schreiben sollen, dass etwas fragt, auf das man mit ja oder nein antworten kann. Wenn etwas anderes als y,j,n eingegeben wird, soll die Frage erneut gestellt werden und zudem ein Text ausgegeben werden. Soweit bin ich bisher:

    /* Nächster Versuch mit Switch*/
    
    #include <stdio.h>
    #include <ctype.h>
    
    main () {
         char eingabe;
    
         printf("Hallo, hast du heute schon am Uebungsblatt gearbeitet?\nGib 'J','j','Y' oder 'y' fuer 'Ja' bzw. 'N' oder 'n' fuer 'Nein' ein.\n"); 
      printf("\nIhre Wahl: ");
      eingabe = getchar ();
    
      switch (toupper(eingabe)) {
             case 'J':
                  printf("Ausgezeichnet!\n");
                  break;
             case 'Y':
                  printf("Ausgezeichnet!\n");
                  break;
             case 'N':
                  printf("Ran an die Arbeit!\n");
                  break;
             else:
                 printf("Damit kann ich nichts anfangen.\n");
                 break;
                 }
    }
    

    Ich weiß mittlerweile, dass "else" nicht zu "case" passt, aber womit kann ich denn sonst angeben "bei anderer Eingabe tue folgendes:"? (An dem Problem mit der erneuten Frage beschäftige ich mich danach, daher ist dafür noch nichts vorhanden)

    Ich würde mich sehr über Hilfe freuen =J



  • default: heißt das.



  • Oh. Ehm... Dankeschön ^^ Wieder was dazugelernt. Jetzt klappt das auch 🙂



  • Dann fehlt da wohl noch eine Schleife, die die geforderte Wierholung durchführt? Habt ihr das im Unterricht schon gehabt?
    ersetze mal

    char eingabe;
    

    zu

    int eingabe;
    

    und

    eingabe = getchar ();
    

    zu

    eingabe = getchar (); if( eingabe!='\n' ) while( getchar()!='\n' );
    

    Jetzt fehlt bloß noch erwähnte Schleife und es sollte wohl funktionieren.
    Habe auch schon schlechtere erste C Gehversuche gesehen.



  • case 'J':
        printf("Ausgezeichnet!\n");
        break;
    case 'Y':
        printf("Ausgezeichnet!\n");
        break;
    

    lässt sich so besser schreiben:

    case 'J':
    case 'Y':
        printf("Ausgezeichnet!\n");
        break;
    


  • hallo,
    ich fange auch gerade erst mit c an und habe auch sonst noch so gut wie keine Erfahrungen mit Programmierung.

    Mit folgendem Codeausschnitt habe ich Verständnisprobleme:

    Wutz schrieb:

    eingabe = getchar (); if( eingabe!='\n' ) while( getchar()!='\n' );
    

    Was genau macht die if-Anweisung?

    Wenn die eingabe nicht newline entspricht, dann werden solange zeichen eingelesen bis "\n" eingegeben wird?!?

    Ist das eine Alternative um die "überflüssingen" Eingaben zu löschen? Wie mit fflush(stdout) (oder so ähnlich) ?

    Mfg domi



  • dkra89 schrieb:

    Wenn die eingabe nicht newline entspricht, dann werden solange zeichen eingelesen bis "\n" eingegeben wird?!?

    Bingo!

    dkra89 schrieb:

    Ist das eine Alternative um die "überflüssingen" Eingaben zu löschen? Wie mit fflush(stdout) (oder so ähnlich) ?

    Bingo!

    Was verschiedene Leute mit fflush(stdin) versuchen, funktioniert mit o.g. plattformunabhängig, entspricht die C Sprachstandard, ...
    Würde in deinem Fall auch noch kürzer gehen, z.B.

    while( eingabe!='\n' && getchar()!='\n' );
    


  • OK danke für die schnelle Antwort!
    Dann werd ich das in zukunft auch so verwenden=)


Anmelden zum Antworten