Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Only allowing yes or no as an answer

Tags:

c#

.net

I am a complete newbie and i am stuck on a small problem

I want the user to only be able to have yes or no as an answer.

This is what I came up with

static public bool askBool(string question)
{
    try
    {
        Console.Write(question);
        return Console.ReadLine() == "y";
    }
    catch (Exception)
    {
        throw new FormatException("Only y or n Allowed");
    }
}

The problem is entering any other letter then 'y' will result in false, how can I best solve this ?

Thank you in advance.

EDIT (from comment question)

try
{
    Console.Write(question);
    return int.Parse(Console.ReadLine());
}
catch (Exception)
{
    throw new FormatException("Please Enter a Number");
}
like image 402
RobertNewToJava Avatar asked Oct 29 '25 19:10

RobertNewToJava


2 Answers

I doubt if you want an exception to be thrown - there's nothing exceptional if the user puts OK instead of yes; I suggest to keep asking until "yes" or "no" are read:

   public static AskBool(string question) {
     while (true) {
       // If we have a question to ask (the question is not empty one)...
       if (!string.IsNotNullOrWhiteSpace(question)) 
         Console.WriteLine(question); // ... ask it

       // Trim: let be nice and trim out leading and trailing white spaces
       string input = Console.ReadLine().Trim();

       // Let's be nice and accept "yes", "YES", "Y" etc.
       if (string.Equals(input, "y", StringComparison.OrdinalIgnoreCase) || 
           string.Equals(input, "yes", StringComparison.OrdinalIgnoreCase))
         return true;
       else if (string.Equals(input, "n", StringComparison.OrdinalIgnoreCase) || 
                string.Equals(input, "no", StringComparison.OrdinalIgnoreCase))
         return false;

       // In case of wrong user input, let's give a hint to the user
       Console.WriteLine("Please, answer yes or no (y/n)");
     } 
   } 
like image 141
Dmitry Bychenko Avatar answered Nov 01 '25 09:11

Dmitry Bychenko


Here the method will only return true or false if user has entered true or false.If user enters any word the loop will just continue to ask him for input until he enters y or n

you can give it a try by doing following changes

static public bool askBool(string question)
    {
       bool boolToReturn = false;
       Console.Write(question);
       while (true)
       {
          string ans = Console.ReadLine();
          if (ans != null && ans == "y")
          {
              boolToReturn = true;
              break;
          }
          else if ( ans != null && ans == "n")
          {
              boolToReturn = false;
              break;
          }
          else
          {
              Console.Write("Only y or n Allowed");
          }
       }
       return boolToReturn;
    }`

Answer to second question:-

`

    public static int askInt(string question)
        {
           Int intToReturn = false;
           Console.Write(question);
           while (true)
           {
              string ans = Console.ReadLine();
              if (int.TryParse(and,out intToreturn))
                  break;
              else
                  Console.Write("Only number Allowed");
           }
           return intToReturn;
        }`
like image 42
Lucifer Avatar answered Nov 01 '25 07:11

Lucifer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!