只允许是或否作为答案

时间:2018-05-31 06:53:11

标签: c# .net

我是一个完整的新手,我遇到了一个小问题

我希望用户只能将作为答案。

这就是我想出来的

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

问题是输入任何其他字母然后'y'会导致错误,我怎样才能最好地解决这个问题?

提前谢谢你。

编辑(来自评论问题)

try
{
    Console.Write(question);
    return int.Parse(Console.ReadLine());
}
catch (Exception)
{
    throw new FormatException("Please Enter a Number");
}

5 个答案:

答案 0 :(得分:4)

我怀疑你是否想要抛出异常 - 如果用户放置OK而不是{{1},则异常 };我建议继续询问直到"是"或"不"阅读:

yes

答案 1 :(得分:3)

  

如果用户输入了true或false,则此方法仅返回true或false。如果用户输入任何单词,循环将继续询问他输入,直到他输入yn < / p>

您可以通过执行以下更改来尝试

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;
    }`
  

回答第二个问题: -

`

    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;
        }`

答案 2 :(得分:3)

Dmitry对switch的答案的更简化版本(我通常为这种情况做的):

static public bool askBool(string question)
{  
    while(true)
    {
        Console.Clear();
        Console.Write(question);
        var input = Console.ReadLine().Trim().ToLowerInvariant();
        switch (input)
        {
            case "y":
            case "yes": return true;

            case "n":
            case "no": return false;
        }
    }
}

此外,我会考虑将.ReadLine()更改为.ReadKey(),因为我们真正需要的只是'y'或'n'......一个关键就够了。

我们使用Exception主要用于意外值会导致某些错误的情况。当我们希望用户输入垃圾值并处理它们时,我们不会抛出异常。

答案 3 :(得分:1)

你想抛出异常,而不是抓住它。例如:

static public bool askBool(string question)
{
    Console.Write(question);
    var input = Console.ReadLine();
    if (input == "y")
    {
        return true;
    }
    else if(input == "n")
    {
        return false;
    }
    else//It's not y or n: throw the exception.
    {
        throw new FormatException("Only y or n Allowed");
    }
}

当然,您必须捕获&#39; FormatException&#39;你在哪里调用这种方法。

答案 4 :(得分:0)

这样的东西?

if (Console.ReadLine() == "y")
            {
                return true;
            }
            else if (Console.ReadLine() == "n")
            {
                return false;
            }
            else {
              throw new Exception("only y and n allowed...");
            }