Schleifenabbruch bei Return



  • Hallo,
    Wie bekomme ich das hin das die do-while Schleife bei Eingabe der Return-Taste weiter läuft, und bei der Eingabe eines beliebigen anderen Zeichens aufhört?
    Meine Versuche, z. B. dieser hier ist auch gescheitert:

    char auswahl;
     do {
       Console.Write(" Neue Berechnung [yes: Return , no: Anychar]-> ");
     } while( '\n' == (auswahl = char.Parse(Console.ReadLine())) ); /* Solange Return  */
    

    Wenn ich dann auf die Return-Taste drücke kommt immer die Fehlermeldung:
    "Die Zeichenfolge darf nur genau ein Zeichen lang sein." und der Visual C# Compiler makiert mir die Zeile mit der while() gelb.

    Gruß
    Johann



  • Also den Fehler bekommst du mal so weg:

    string auswahl; 
     do { 
       Console.Write(" Neue Berechnung [yes: Return , no: Anychar]-> "); 
       auswahl = Console.ReadLine();
     } while(auswahl == "\n");
    

    Da du ReadLine verwendest wird der User aber in jedem Fall noch Return drücken müssen nachdem er irgend ein Zeichen eingegeben hat. Nur "x" zu drücken reicht nicht.
    Falls dass das ist was du willst -> gewonnen.



  • Danke für die Antwort 🙂
    ja die Fehlermeldung ist jetzt erstmal weg.
    Wenn ich nun ein beliebiges Zeichen eingebe, beendet die Schleife das soll auhc so sein, allerdings beendet die Schleife auch wenn ich nur auf Return-Taste drücke und das soll sie ja nicht. Bei Return solls von vorne los gehen.



  • OK 🙂
    In der Doku zu ReadLine steht:

    The returned string does not contain the terminating character(s).

    Also versuchs mal mit == "" statt == "\n" 😉



  • \n = Newline (ascii 10)
    \r = Return (ascii 13)



  • hust den Thread hab ich doch schonmal wo gesehn.



  • loks schrieb:

    \n = Newline (ascii 10)
    \r = Return (ascii 13)

    und was willst du uns damit sagen?



  • @Johann2
    Solche Probleme zu lösen ist tägliche Programmierarbeit, etwas probieren hätte doch gereicht.

    z.B. den wert mittels
    auswahl = Console.ReadLine();
    holen, und dann mit dem Debugger nach sehen was "auswahl" an der stelle ist.

    Mir würde zudem noch Environment.NewLine als konstante einfallen, eventuell sollte man dagegen vergleichen.

    Aber an der stelle irrelevant, wie hustbaer schon korrekt schrieb: "The returned string does not contain the terminating character(s)."
    Das steht in der Doku, das solltest du auch mal lesen.

    Programmieren heißt auch Informationsbeschaffung.



  • Wie wär's denn hiermit:

    ConsoleKeyInfo input;
    do
    {
         input = Console.ReadKey();
         ...
    } while (input.Key == ConsoleKey.Enter);
    


  • xD danke für die Antworten.
    Ja ich weiß hät ich noch bischen probiert, hätt ichs bestimmt auch geschafft , nur es war mir schon zu spät geworden und ich musste heute morgen das Programm beim Prof abgeben^^ Dann hab ich halt einfach mal beim programmieren nebenbei in 2 verschiedenen Foren gepostet, aus Zeitnot. 😃
    So hab ichs jetzt gemacht:

    } while( auswahl == "" );
    

    Gruß
    johann



  • oder so?

    do
    {
       Console.Write(" Neue Berechnung [yes: Return , no: Anychar]-> ");                
    } while (String.Empty == Console.ReadLine());
    


  • Mich wundert echt, dass in keinem der beiden Foren in denen ich mich aufhalte auch nur eine Anmerkung wegen Crossposts kam...

    http://www.mycsharp.de/wbb2/thread.php?threadid=84357


Anmelden zum Antworten