我正在构建一个从用户那里获取两个输入的应用程序。一个int和另一个浮点数。
int.MaxValue
和float.MaxValue
是我用来验证输入的两个属性。
但是,输入是通过添加每个KeyChar
以这种方式构建的,因为在按键事件期间必须验证每个键输入,因为应用程序将用户限制为数字(整数/小数)。
到目前为止的代码:
ConsoleKeyInfo key;
const int intMaxValue = int.MaxValue;
const float floatMaxValue = float.MaxValue;
bool validated;
int tempAmount;
int intAmount;
string tempVal="";
do{
key = Console.ReadKey (true);
if (key.Key != ConsoleKey.Backspace)
{
validated = int.TryParse (key.KeyChar.ToString(), out tempAmount);
if (validated)
{
///Full amount is built here
tempVal += key.KeyChar;
//Fails here--->> as Type Cast happens on a String which hold a value beyond an int
if (int.Parse(tempVal) < intMaxValue)
{
intAmount = int.Parse(tempVal);
Console.Write(key.KeyChar);
}
用户按下Enter键后,我可以进行此测试。但是它仍然会失败。因为int无法超越其最大值。
因此我想出了以下内容:但是由于我的第二个输入验证基于float
....
if (float.Parse(tempVal) < intMaxValue)
{
因此有人请告诉我一个有效的int属性,可以在两个场景中使用的float类。 OR 缝制输入的任何其他方式,同时逐位验证每个密钥,直到用户输入Enter键为止。
答案 0 :(得分:1)
您可以尝试使用TryParse
。
如果值不是有效TryParse
,Int32
将评估为false(如果超过Int32.MaxValue
则为false)。
int realValue;
if (Int32.TryParse(tempVal, out realValue))
{
intAmount = int.Parse(tempVal);
Console.Write(key.KeyChar);
}
您还可以使用相应的float.TryParse
来测试您期望的浮点值。
答案 1 :(得分:1)
你可以试试这个:
if (validated)
{
///Full amount is built here
long l = long.Parse(tempVal + key.KeyChar);
if (l < intMaxValue)
{
intAmount = (int)l;
tempVal += key.KeyChar;
Console.Write(key.KeyChar);
}
但是,正如其他人所建议的那样,您应该使用Console.ReadLine
并将TryParse
与while
循环结合使用,直到输入为validated
。
在对代码进行深入扫描后,我认为当您已经拥有tempVal
时,您不需要intAmount
,只需执行以下操作:
if (validated)
{
long k = intAmount*10L + (int) key.KeyChar - 48;
if (k < intMaxValue)
{
intAmount = (int)k;
Console.Write(key.KeyChar);
}
答案 2 :(得分:0)
使用ReadLine会更容易
bool validated = false;
int integerRequired;
Console.WriteLine("Type an integer number:");
while(validated == false)
{
string userInput = Console.ReadLine();
validated = int.TryParse (userInput, out integerRequired);
if (!validated )
Console.WriteLine("Not a valid integer, please retype a valid integer number");
}
float singleRequired;
validated = false;
Console.WriteLine("Type a floating point number:");
while(validated == false)
{
string userInput = Console.ReadLine();
validated = Single.TryParse (userInput, out singleRequired);
if (!validated)
Console.WriteLine("Not a valid float, please retype a valid float number");
}
在此示例中,只有在完成输入并按Enter键后才会对用户输入作出反应。此时,您可以使用适合输入的TryParse版本评估输入,并选择向用户显示或不显示错误消息。