如何使文本框仅接受1到6之间的int [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我一直想弄清楚如何做好几个小时。如何使程序仅采用1到6的值,否则崩溃?

“用户只输入可接受的信用小时数 - 输入的每个信用小时数是0到6之间的整数,没有别的。在这种情况下,任何无效或错误或空的输入数据都会导致运行时错误,这是预期的并且很好“。

这是我尝试过的方法之一。我需要找出如何使程序只是给出运行时错误。我不需要继续询问输入或显示消息“错误”

creditHours = double.Parse(tb_credit.Text);

if (creditHours != 1 || creditHours != 2 || creditHours != 3 || 
    creditHours != 4 || creditHours != 5 || creditHours != 6)
{ 
    creditHours = double.Parse(tb_credit.Text); 
}
c# asp.net .net c#-4.0
3个回答
1
投票

Mehdi是正确的,但是这就是为什么你的代码不起作用的原因。

假设用户输入“2”,然后

if(creditHours != 1 || ...)
{

}

这是真的,因为creditHours不等于1,它是2.但是,然后让我们说用户输入“9”,if(creditHours != 1 || ...)仍然会再次为真,因为creditHours不等于1而是9.而是有效和无效值产生相同的结果。要更正您的代码,您需要if(creditHours == 1 || ...)

Mehdi的代码更简单,但我喜欢写;

if(0 <= creditHours && creditHours <= 6)
{

}

认为它只是读得更好。


0
投票
if (creditHours < 0 || creditHours > 6)
{ 
    throw new Exception("Credit hours can only be between 0 and 6."); 
}

0
投票
  1. 你的条件不对,因为如果输入的数字是7那么条件if(creditHours!= 1 || ...)将返回true。 =>你应该通过这个条件验证if(creditHours> 0 && creditHours <6)
  2. 如果用户输入的数字无效(例如:“abc123xyz”),则此代码将抛出异常:creditHours = double.Parse(tb_credit.Text)=>您还应使用TryParse处理无效数字。

请检查您的解决方案如下:

if(!double.TryParse(tb_credit.Text, out var creditHours))
{
    throw new Exception("Credit hours should be a numbers between 0 and 6.");
}

if (creditHours > 0 || creditHours < 6)
{
    creditHours = double.Parse(tb_credit.Text);
}

throw new Exception("Credit hours should be a numbers between 0 and 6.")
© www.soinside.com 2019 - 2024. All rights reserved.