输入验证 - 数字与字母

时间:2009-11-13 20:26:54

标签: c# validation

我正在创建一个简短的C#控制台程序,它将使用0-10的随机数询问10个附加问题。然后它告诉用户他们有多少正确或不正确的答案。我试图找到一种方法来验证我的用户输入是一个数字而不是一个字母。我发布了目前为止创建的代码,但可以使用一些帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 0;
            int input;
            int correct = 0;
            int incorrect = 0;
            int questions = 10;
            int[] solutions = new int[21];
            int[] answers = new int[21];
            int[] number1 = new int[21];
            int[] number2 = new int[21]; 

            Random number = new Random();

            Console.WriteLine("  This is a test of your basic addition skills. ");
            Console.WriteLine("  Please answer the random addition question below ");
            Console.WriteLine("  with a number from 1 - 20 and press enter to get the");
            Console.WriteLine("  next of 10 questions.  At the end of the questions");
            Console.WriteLine("  your results will be calculated and presented to you.");
            Console.WriteLine("");
            Console.WriteLine("");

            while (i < questions)
            {
                number1[i] = number.Next(0, 10);
                number2[i] = number.Next(0,10);
                solutions[i] = (number1[i] + number2[i]);

                //Console.WriteLine("{0} +  {1} =  {2}", number1[i], number2[i],solutions[i]);  

                Console.Write("  {0} +  {1} =  ", number1[i], number2[i]);

                answers[i] = Convert.ToInt32(Console.ReadLine()); // original code      

                //input = Convert.ToInt32(Console.ReadLine());
                //if (input > 0 && input <21)
                //{
                //   Console.WriteLine("YOur answer is: {0}", input);
                //}
                //else
                //Console.WriteLine("YOur answer is not valid");

                if (solutions[i] == answers[i])
                {
                    Console.WriteLine("  Correct");
                    correct++;
                }
                else
                {
                    Console.WriteLine("  Your answer is incorrect, the correct answer is {0}", solutions[i]);
                    incorrect++;

                }
                //Console.WriteLine("{0}", answers[i]);

                //int sum = numberone + numbertwo;
                //answers[sum]++;
                i++;
            }

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("The number correct is: {0}, The number incorrect is: {1}", correct, incorrect);
        }
    }
}

5 个答案:

答案 0 :(得分:14)

使用int.TryParse(),如:

bool isNumber=false;
int number;
while (!isNumber)
{
  string txt = Console.ReadLine();
  if (!int.TryParse(txt, out number))
  {
    // not a number, handle it
    Console.WriteLine("This is not a number, enter a number. For real now.");
  }
  else
  {
    // use number
    answers[i] = number;
    isNumber = true;
  }
}

答案 1 :(得分:3)

而不是:

answers[i] = Convert.ToInt32(Console.ReadLine()); // original code

使用:

int input;
bool validInput = int.TryParse(Console.ReadLine(), out input);
if (!validInput || input < 0 && input > 20)
    <throw exception or display some error message here...>

编辑:如果您想以递归方式请求正确的输入,请按以下步骤操作:

int input;
bool validInput = false;

while (!validInput)
{
    validInput = int.TryParse(Console.ReadLine(), out input);
    if (!validInput || input < 0 && input > 20)
    {
        validInput = false; // We need to set this again to false if the input is not between 0 & 20!
        Console.WriteLine("Please enter a number between 0 and 20");
    }
}

答案 2 :(得分:2)

int iResult = int.MinValue;
bool bParsed = int.TryParse("xyz", out iResult);

TryParse不会抛出异常。

但是,如果需要,您也可以使用Convert.ToInt32(),但这会在坏数据上引发异常。

答案 3 :(得分:1)

类似的东西:

if (int.TryParse(Console.ReadLine(), out answers[i]) && answers[i] > 0 && ...)
{ 
    ...
}
else
{
   // invalid answer
}

答案 4 :(得分:0)

这允许您填充阵列的所有位置:

int result;
bool isInt = Int32.TryParse(Console.ReadLine(), out result);
if (!isInt) {
  Console.WriteLine("Your input is not an integer number.");
  continue;
}

answers[i] = result;