c#执行while循环不按我需要的方式工作
只要宽度小于0.5(最小宽度)或大于5.0(最大宽度),我希望我的循环重复。这两个循环都创建为常数倍。 当我写数字0时,它会像应该的那样重复,但是如果我写0.1-0.4之间的任何东西,它会跳过循环,为什么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
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”部分的内容。