c#执行while循环不按我需要的方式工作

c#执行while循环不按我需要的方式工作,c#,C#,只要宽度小于0.5(最小宽度)或大于5.0(最大宽度),我希望我的循环重复。这两个循环都创建为常数倍。 当我写数字0时,它会像应该的那样重复,但是如果我写0.1-0.4之间的任何东西,它会跳过循环,为什么 do { Console.Write("Give the width of the window between " + MIN_WIDTH + " and " + MAX_WIDTH + " :"); widthString

只要宽度小于0.5(最小宽度)或大于5.0(最大宽度),我希望我的循环重复。这两个循环都创建为常数倍。 当我写数字0时,它会像应该的那样重复,但是如果我写0.1-0.4之间的任何东西,它会跳过循环,为什么

  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);
do
{
控制台。写入(“给出介于“+MIN_width+”和“+MAX_width+”:”)之间的窗口宽度;
widthString=Console.ReadLine();
宽度=double.Parse(宽度字符串);
}而(宽度<最小宽度>最大宽度);

您似乎遇到了十进制和千位分隔符的问题:如果在您当前的文化中(例如,在俄语中
RU-RU
one)
是它忽略的千位(不是十进制)分隔符,您将得到
0.4
04
4
,这将通过条件

补救措施:明确指定
CultureInfo.InvariantCulture

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);
do{
Write($“给出介于{MIN_width}和{MAX_width}之间的窗口宽度:”);
widthString=Console.ReadLine();
双倍宽度;
如果(!double.TryParse(宽度字符串,
数字样式。任何,
CultureInfo.InvariantCulture,
外宽)
继续;
}而(宽度<最小宽度>最大宽度);

您似乎遇到了十进制和千位分隔符的问题:如果在您当前的文化中(例如,在俄语中
RU-RU
one)
是它忽略的千位(不是十进制)分隔符,您将得到
0.4
04
4
,这将通过条件

补救措施:明确指定
CultureInfo.InvariantCulture

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);
do{
Write($“给出介于{MIN_width}和{MAX_width}之间的窗口宽度:”);
widthString=Console.ReadLine();
双倍宽度;
如果(!double.TryParse(宽度字符串,
数字样式。任何,
CultureInfo.InvariantCulture,
外宽)
继续;
}而(宽度<最小宽度>最大宽度);

您是否尝试过(如果您使用的是VS)调试解决方案以检查值?@Geosocker,我认为OP非常清楚它是如何工作的。。。当他不期望时,它会跳过循环。你能设置一个断点并检查
width
的值是多少吗。我猜您的区域设置/区域设置与您的输入不匹配,因此它将
0.1
解析为
1
0.4
解析为
4
。我试过了,您是对的。如果我写0.1,它将宽度设置为1。感谢您尝试(如果您使用VS)调试解决方案以检查值?@Geosocker,我认为OP非常清楚它是如何工作的。。。当他不期望时,它会跳过循环。你能设置一个断点并检查
width
的值是多少吗。我猜您的区域设置/区域设置与您的输入不匹配,因此它将
0.1
解析为
1
0.4
解析为
4
。我试过了,您是对的。如果我写0.1,它将宽度设置为1。谢谢你,这解决了问题。我将阅读更多关于“CultureInfo.InvariantCulture”部分的内容。谢谢,这解决了问题。我将阅读更多关于“CultureInfo.InvariantCulture”部分的内容。