2016-10-02 2 views
0

Ich möchte meine Schleife wiederholen, solange die Breite unter 0,5 (MIN_BREITE) oder über 5,0 (MAX_BREITE) beide als Konstante doubles erstellt wird. Wenn ich die Zahl 0 schreibe, wird es so wiederholt, wie es sollte, aber wenn ich irgendetwas zwischen 0,1 - 0,4 schreibe, überspringt es die Schleife, warum?C# Do-while-Schleife funktioniert nicht, wie ich es brauche

do 
     { 
      Console.Write("Give the width of the window between " + MIN_WIDTH + " and " + MAX_WIDTH + " :"); 
      widthString = Console.ReadLine(); 
      width = double.Parse(widthString); 
     } while (width < MIN_WIDTH || width > MAX_WIDTH); 
+0

Haben Sie versucht, (wenn Sie VS verwenden), um die Lösung zu debuggen den Wert (e) zu überprüfen? – geostocker

+0

@geostocker, Ich denke, der OP war ziemlich klar darüber, wie es nicht funktioniert ... Es überspringt die Schleife, wenn er es nicht erwartet. –

+3

Können Sie einen Haltepunkt setzen und überprüfen, was der Wert von 'width' ist. Meine Vermutung ist, dass Ihre Gebietsschema-/Kultureinstellungen nicht mit Ihrer Eingabe übereinstimmen, also "0,1" als "1" und "0,4" als "4" parst. – Yakimych

Antwort

3

Es scheint, dass Sie Probleme mit dezimal und Separatoren auftreten: Wenn in der aktuellen Kultur (zB in Russisch RU-ru one) . ist ein (nicht dezimal) Separator ignoriert und Sie erhalten 0.4 ->04 ->4 die die Bedingung übergeben.

Abhilfe: Geben Sie CultureInfo.InvariantCulture explictly

do { 
    Console.Write($"Give the width of the window between {MIN_WIDTH} and {MAX_WIDTH}: "); 
    widthString = Console.ReadLine(); 

    double width; 

    if (!double.TryParse(widthString, 
         NumberStyles.Any, 
         CultureInfo.InvariantCulture, 
         out width)) 
    continue; 
} while (width < MIN_WIDTH || width > MAX_WIDTH); 
+0

Danke, das hat das Problem behoben. Ich lese mehr über den Teil "CultureInfo.InvariantCulture". –

Verwandte Themen