Int& amp;控制台应用程序输入验证浮动最大值C#

时间:2013-09-22 10:05:16

标签: c# validation console-application

我正在构建一个从用户那里获取两个输入的应用程序。一个int和另一个浮点数。 int.MaxValuefloat.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键为止。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用TryParse。 如果值不是有效TryParseInt32将评估为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并将TryParsewhile循环结合使用,直到输入为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版本评估输入,并选择向用户显示或不显示错误消息。