Dennis
Dennis

Reputation: 169

How do I prevent crashing from invalid user input?

I have encountered a problem where my program crashes due to the input of the user not following the variable data type. What I am asking the user to do is register some data for a movie. When we reach the year of release for the movie, it crashes, should the user input not follow the integer data type.

What I then also was trying to do is to make sure the value of int release is a number between 1000 and 2050.

What I want to have happen: The user is forced to enter a value between 1000 and 2050. Should a different value be entered, he is asked to try again.

The code I believe should be relevant:

public static void RegisterMovie()
    {
        Console.Write("Ange titel: ");
        string title = Console.ReadLine();
        Console.Write("Ange genre: ");
        string genre = Console.ReadLine();

        Console.Write("Ange release: ");
        int release = int.Parse(Console.ReadLine());

        Console.Write("Ange actor: ");
        string actor = Console.ReadLine();
        Console.Write("Ange director: ");
        string director = Console.ReadLine();

        Movie m = CreateMovie(title, genre, release, actor, director);
        AddMovie(m);
    }

Thanks for helping me out.

Upvotes: 1

Views: 1564

Answers (3)

Henrik
Henrik

Reputation: 23324

bool ok = false;
int release;
while (!ok)
 {
   Console.Write("Ange release: ");
   ok = int.TryParse(Console.ReadLine(), out release);
   ok = ok && (release >= 1000) && (release <= 2050);
 }

Upvotes: 3

Display Name
Display Name

Reputation: 8128

Use Int32.TryParse() and handle the case when it's not an integer. The return value indicates whether the operation succeeded.
For more information see http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

Upvotes: 2

Tieson T.
Tieson T.

Reputation: 21231

Use TryParse instead.

Console.Write("Ange release: ");
int release;
while (!int.TryParse(Console.ReadLine(), out release))
{
    Console.Write("Ange release: ");
}

Upvotes: 1

Related Questions