c#代码是否仅接受正数并且不接受负数?
像
Console.WriteLine("Write number");
Console.ReadLine();
我阅读了教程,但仍然没有帮助
现在我不知道如何防止负数。
答案 0 :(得分:5)
为了使用户友好,循环通常是好的,在输入有效输入之前继续询问输入。如果输入了无效输入,TryParse
将返回false
。输入有效输入后,TryParse
会返回true
,number
会保留该值。使用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
,这是您不想要的。
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的整数。