2011-11-24 89 views
-2

是否有只接受正数并且不接受负数的c#代码?阻止C#中的负数?

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

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

,现在我没有任何想法如何防止负数。

+0

“预防”意味着什么?自己检查号码。 – VMAtm

回答

0

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

后您解析字符串,并确保它是一个整数,只是通过调用Math.Abs()取绝对值,你会做。

3

你必须通过阅读次数手动检查自己...

do { 
    //Read number into variable 

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

它的工作原理,如果其负面然后检查。如果是,那么它会警告用户,循环强制它们重试。

+0

谢谢,那是我正在寻找,但“数不能否定”不停止,只是来没有停止时,我输入负数,我想它来一次。 – CsharpNoob

+0

对不起,我不清楚。您需要用您用来获取号码的代码替换我的评论。这样当'if(number <0)'被击中时,它会再次询问数字。 – Grambot

5

为了使用户友好的循环往往是很好的,这将继续要求输入,直到输入一个有效的输入。如果输入了非有效输入,TryParse返回false。当输入有效输入时TryParse返回truenumber保存该值。使用uint将防止输入负数。

uint number; 

do 
{ 
    Console.WriteLine("Write non-negative number"); 
    string strNumber = Console.ReadLine(); 
} 
while(!uint.TryParse(strNumber, number)); 
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" /> 
0

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

这不仅将确保用户输入的是一个整数,而且它是积极的。否则,你将不得不执行2部分检查;第一个是用户输入一个整数,第二个是大于0的整数。

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可能不可用。