防止C#中的负数?

时间:2011-11-24 20:00:35

标签: c#

c#代码是否仅接受正数并且不接受负数?

Console.WriteLine("Write number"); 
Console.ReadLine();

我阅读了教程,但仍然没有帮助

现在我不知道如何防止负数。

6 个答案:

答案 0 :(得分:5)

为了使用户友好,循环通常是好的,在输入有效输入之前继续询问输入。如果输入了无效输入,TryParse将返回false。输入有效输入后,TryParse会返回truenumber会保留该值。使用uint可以防止输入负数。

uint number;

do
{
  Console.WriteLine("Write non-negative number");
  string strNumber = Console.ReadLine();
}
while(!uint.TryParse(strNumber, number));

答案 1 :(得分:3)

你必须亲自手动检查......

do {
   //Read number into variable   

   if (number < 0) {
     Console.WriteLine("Number cannot be negative");
   }
}while(number < 0)

它的工作原理是读取数字,然后检查它是否为负数。如果是,则它会警告用户并且循环强制他们重试。

答案 2 :(得分:1)

uint.TryParse不同的是int.TryParse(string, NumberStyles, IFormatProvider, out int)重载,它允许您更多地指定有效输入应该是什么样的:

string str = ...
int value;
if (int.TryParse(str, NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite, CultureInfo.CurrentCulture, out value))
{
    // ...
}

普通int.TryParse还包含NumberStyles.AllowLeadingSign,这是您不想要的。

如果符合CLS的代码有严格的准则,则

uint可能无法使用。

答案 3 :(得分:0)

uint,但这不是你想要的,因为用户仍然可以输入负数。

解析字符串并确保它是一个整数后,只需调用Math.Abs()取绝对值即可。

答案 4 :(得分:0)

如果您在数据输入字段中尝试阻止用户输入负数,您有多种选择。

  • 一个是不允许输入任何数字,逗号和 周期。
  • 另一种方法是在从数据条目中读取字符后删除代码中的字符。

处理此问题的方法在不同类型的应用程序中有所不同 - 控制台,WinForms / WPF或网站。

例如,在ASP.Net网页上,您可以使用验证控件仅允许输入数字。这是一种方法:

<asp:CompareValidator
    ControlToValidate="AmountTextbox"
    Operator="GreaterThanEqual"
    Type="Currency"   'needed this to cover amts with & w/o decimals
    ValueToCompare="0"
    ErrorMessage="The Amount cannot be negative."
    Display="None"
    Runat="server" />

答案 5 :(得分:0)

Console.ReadLine()不会限制用户可以在命令行中输入的内容。您需要自己验证输入;可能最简单的方法就是BoltClock所描述的。但是,您需要尝试 - 在值不是uint的情况下捕获他的代码以捕获无效的强制转换异常。

这不仅可以确保用户输入是一个整数,而且还是肯定的。否则你将不得不进行2部分检查;首先,是用户输入一个整数,第二个是大于0的整数。