[gelöst]do while_ geht nicht :(



  • Hey hab ein Problem in einem grösseren Prog mit der do while schlaufe (verwende sie zum ersten mal), um zu sehen wo der Fehler liegt hab ich ein kleines Bsp.Programm geschrieben mit do while (Ziel wäre, dass es sich wieder wiederholt, sprich dass von vorne angefangen wird (von do))

    #include <stdio.h>
    #include <windows.h>
    
    char Auswahl = ' ';
    char Auswahl2 = ' ';
    
    int main () 
    {
          do {
             printf("<J/N>?\n");                     
             scanf("%c", &Auswahl);
    
         if (Auswahl == 'J' || Auswahl == 'j' ) 
                     {
                     printf("\nSie haben JA gewaehlt!\n\n");
                     }
         else if (Auswahl == 'N' || Auswahl == 'n')
                     {
                     printf("\nSie haben NEIN gewaehlt!\n\n"); 
                     } 
    
            printf("\nNochmals?");
            printf("\n<J/N>: ");
            scanf("%c", &Auswahl2);
            }
    
         while(Auswahl2 == 'J' || Auswahl2 == 'j');             
    
         system("PAUSE");
        return 0;    
    }
    

    Hoffe ihr könnt mir helfen, MfG 🙂



  • wahrscheinlich ist Dein Tastaturpuffer nicht leer (sh auch Leermachen).

    Edit: ist jetzt doch etwas zu lakonisch, also Dein Scanf legt los, wenn das Enter gedrückt wurde, aber Du fischst nur den ersten Buchstaben ab, dahinter stehen bei Win noch zwei Chars, ein CR und ein LF, die bleiben im Puffer liegen. Das zweite scanf legt auch erst wieder mit Enter los, liest aber den Kram, der davor drin war und das ist kein 'J' oder 'j'. Soweit klar jetzt?

    Und bitte rücke etwas hübscher ein, das sieht ja wie Kraut und Rüben aus! 😉



  • pointercrash() schrieb:

    wahrscheinlich ist Dein Tastaturpuffer nicht leer (sh auch Leermachen).
    Und bitte rücke etwas hübscher ein, das sieht ja wie Kraut und Rüben aus! 😉

    Tut mir Leid, ich progge erst seit einem Monat (Anfänger) und kann mit dem ersten Satz leider nix anfangen >< (was meinste mit sh?)
    Und zum Einrücken, ich benutze DEV C++, also nix mit AUTO und das war ja nurn Beispiel Prog^, damit ich ins Forum nicht, das ganze Programm poste.. Dennoch danke für die Hilfe, MfG



  • eMaNu3L schrieb:

    Tut mir Leid, ich progge erst seit einem Monat (Anfänger) und kann mit dem ersten Satz leider nix anfangen >< (was meinste mit sh?)
    Und zum Einrücken, ich benutze DEV C++, also nix mit AUTO und das war ja nurn Beispiel Prog^, damit ich ins Forum nicht, das ganze Programm poste.. Dennoch danke für die Hilfe, MfG

    sh. ist das Kürzel für "siehe".

    A propos: sh. meinen vorigen Post, da hab' ich nochn Edit nachgelegt. 😉



  • Wie erwähnt bist du in die klassische Anfängerfalle gelaufen. Das zeichenweise Einlesen von der Console ist etwas diffizil zu handhaben, es gibt verschiedene (leider oftmals plattform/compiler-abhängige) Vorschläge.
    Statt scanf("%c")... müsstest du was anderes bzw. was zusätzliches aufrufen, oder was selber basteln z.B.

    int liesEinZeichen()
    {
      int c,r='\n';
      while( (c=getchar())!=EOF )
      {
        if( c=='\n' )
          return r;
        if( r=='\n' )
          r=c;
      }
      return c;
    }
    ...
    int Auswahl;
    ...
    Auswahl = liesEinZeichen();
    

    Testfälle für die Nutzereingabe wären z.B. die alleinige Eingabe von <ENTER>, die Eingabe von mehr als 1 Zeichen mit abschließendem <ENTER> usw. und jeweils muss das Programm bei jeder weiteren Nutzeraufforderung stehenbleiben.



  • Vielen Dank für eure Hilfe

    @Wutz: Das wär mir noch etwas zu komplex^^

    @pointercrash: Danke, konnte das Problem nun dank "fflush(stdin);" lösen 😉

    MfG


Anmelden zum Antworten