Search code examples
c#validationconsole-applicationuser-inputnumeric

validate several numeric user inputs C# Console


Okay, so I made this program for a small school project. It's just small Console Application were the user is supposed to enter 10 numbers and get the average result, the highest and lowest number. But I want to correct the user if he/she types in something that is not numeric. This is my code:

class Program
{
    static void Main(string[] args)
    {
        int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;

            Console.Write("Enter the 1st number: ");
            num1 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 2nd number: ");
            num2 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 3rd number: ");
            num3 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 4th number: ");
            num4 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 5th number: ");
            num5 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 6th number: ");
            num6 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 7th number: ");
            num7 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 8th number: ");
            num8 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 9th number: ");
            num9 = Convert.ToInt32(Console.ReadLine());

            Console.Write("Enter the 10th number: ");
            num10 = Convert.ToInt32(Console.ReadLine());

            int[] numbers = { num1, num2, num3, num4, num5, num6, num7, num8, num9, num10 };
            int biggestNumber = numbers.Max();
            int smallestNumber = numbers.Min();
            Console.WriteLine("Your biggest number was: " + biggestNumber);
            Console.WriteLine("Your smallest number was: " + smallestNumber);

            int result = (num1 + num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10) / 10;
            Console.WriteLine("The average of your numbers are: " + result);

            Console.ReadLine();
        }
    }
}

After researching online, I found this as a possible solution:

            Console.Write("Enter the 1st number: ");
            while (Int32.TryParse(Console.ReadLine(), out num1) == false)
               {
                Console.WriteLine("Type a number please.");
               }

Although this works, to do this for each of the entries (num2, num3, num4, and so on) all the way down the code. So I thought maybe it's a simpler way to this instead of copy pasting the code block for each user input.

My question is: Is there an easier / more simplified solution to validate all the user inputs (at once maybe)?

EDIT: If you can help me I would love to see how you would implement your solution in my code :)


Solution

  • You need something like that, man. Collect all values to List and work with it :

            List<int> numbers = new List<int>();
            while (numbers.Count() < 10)
            {
                Console.Write("Enter the " + (numbers.Count() + 1) + "st number: ");
                int num;
                while (Int32.TryParse(Console.ReadLine(), out num) == false)
                {
                    Console.WriteLine("Type a number please.");
                }
                numbers.Add(num);
            }
    
            int biggestNumber = numbers.Max();
            int smallestNumber = numbers.Min();
            Console.WriteLine("Your biggest number was: " + biggestNumber);
            Console.WriteLine("Your smallest number was: " + smallestNumber);
    
            int result = numbers.Sum()/numbers.Count();
            Console.WriteLine("The average of your numbers are: " + result);
    
            Console.ReadLine();