views:

559

answers:

3

Hi, in an assignment, I have designed a input validation loop in C#, and I would like it to be able to check for the correct input format. I'm not for sure, but I think my designed loop is not checking the type of input, just what char is entered. I know I could use a try-catch block, but shouldn't you only use exceptions for exceptional situations? This is not an exceptional situation, because I expect that the user would enter an incorrect value.

Input validation is not part of my assignment, so the loop is in a homework assignment, but is not part of the homework assignment.

Question:

Is there a way I could redesign this loop so that it checks for valid input type as well?

Code:

do
    {
        Console.Write("Do you wish to enter another complex number?: (Y or N)");
        response = char.Parse(Console.ReadLine());
        response = char.ToUpper(response);

        if (response != 'Y' && response != 'N')
            Console.WriteLine("You must respond Y or N!");

    } while (response != 'Y' && response != 'N');

Thanks!!

+2  A: 

Well Console.Readline():

Reads the next line of characters from the standard input stream.

So your data will be of type System.String.

The only other checking you could do is to check that the returned string is of length 1, so you know you have input of the right format. You don't really need the char.Parse as the elements of a string are of type char.

ChrisF
thank you! I didn't think about checking the length of the string!
Alex
A: 

Another helpful check in such a situation

Checks for a null string , "" (Empty string) and trims extra white space I.E s string like this " " become this ""

if(String.IsNullOrEmpty(response.Trim() && response != 'Y' && response != 'N'))
{ Console.WriteLine("You must respond Y or N!"); }

And for the most part it is easier to use strings over char in most simple input validation situations.

Terrance
+1  A: 

I don't know what your original asigment is, but the example you provided can be simplyfied by just comparing strings, ie:

response = Console.ReadLine(); 
if (response.ToUpper() == "Y") {...}

If you want to see if the input can be cast to the type you need (for example char), you can allways do (for every value type):

char input;
bool IsValid = char.TryParse(Console.ReadLine().ToUpper(), out input);
if (IsValid) 
{
    Console.WriteLine("You entered the following char: " + input);
}

Hope this helps.

Rekreativc