AylienX
AylienX

Reputation: 3

How to properly use while loop with null int values for user input in C#

I am basically trying to continue a loop until user enters the required input. I got it to work if less than 1 or greater than 7 is input. But I still get an "Unhandled Exception" error if user inputs either space characters or just hits ENTER. Any help or suggestion is greatly appreciated.

Here is the code-

   static void Main(string[] args)
    {
        string[] daysOfWeek = {
            "Sunday",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
        };

        System.Console.WriteLine("  Which day would you like?");
        System.Console.Write("  Choose from 1 and 7. ");
        int? iDay = int.Parse(Console.ReadLine());

        // Loops until user enters number from 1 - 7
        while ( iDay < 1 || iDay > 7 || iDay is null )
        {       
                if ( iDay > 0 && iDay < 8)
                {
                    break;
                }
            System.Console.Write("  < INVALID - CHOOSE FROM 1 AND 7 > ");
            iDay = int.Parse(Console.ReadLine()); 
        }

            string chosenDay = daysOfWeek[(int)iDay-1];
            System.Console.WriteLine($"You chose {chosenDay}.");
        

Upvotes: 0

Views: 381

Answers (1)

Jerry
Jerry

Reputation: 1527

Use int.TryParse

bool isValid = int.TryParse(Console.ReadLine(), out int iDay);

// Loops until user enters number from 1 - 7
while (!isValid || iDay < 1 || iDay > 7)
{
    // This is redundant to the while clause
    //if (iDay > 0 && iDay < 8)
    //{
    //    break;
    //}
    System.Console.Write("  < INVALID - CHOOSE FROM 1 AND 7 > ");
    isValid = int.TryParse(Console.ReadLine(), out iDay);
}

Upvotes: 1

Related Questions