我可以在readline中只允许2个数字吗?

本文关键字:2个 数字 readline 我可以 | 更新日期: 2023-09-27 17:51:04

我只想要0或1…如果我写了2个或更多,我希望程序抛出一个异常…我怎么能只接受这两个数字呢?

 while (true)
        {
            try
            {
                Console.WriteLine("BET OR PASS? (BET == 0 / PASS == 1)");
                int n = int.Parse(Console.ReadLine());
                return n;
            }
            catch
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Error.WriteLine("Invalid Ans!! try again");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
        }

我可以在readline中只允许2个数字吗?

如果您只需要01,则只读取一个字符:

var key = Console.ReadKey(false); // this read one key without displaying it
if (key.Key == ConsoleKey.D0)
{
    return 0;
}
if (key.Key == ConsoleKey.D1)
{
    return 1;
}
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine("Invalid Ans!! try again");
Console.ForegroundColor = ConsoleColor.Gray;

查看Console.ReadKey

你不应该在控制流中使用异常。用TryParse重写:

while (true)
{
    Console.WriteLine("BET OR PASS? (BET == 0 / PASS == 1)");
    int n;
    bool isOk = int.TryParse(Console.ReadLine(), out n);
    if(isOk && n >= 0 && n <= 1)
    {
        return n;
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Error.WriteLine("Invalid Ans!! try again");
        Console.ForegroundColor = ConsoleColor.Gray;
    }
}

在try中你可以像这样抛出;

try
{
     Console.WriteLine("BET OR PASS? (BET == 0 / PASS == 1)");
     int n = int.Parse(Console.ReadLine());
     if (n != 0 || n != 1)
         throw new InvalidArgumentException();
     return n;
}

基本上,无论如何读取输入,然后检查。如果不是1或0,就会抛出无效参数异常。那实际上会被catch块捕获但是一旦你意识到错误,你想做什么取决于你。如果你真的想让程序像你说的那样崩溃,那么删除catch,你的程序将随时崩溃并抛出异常。

while (true)
{
         Console.WriteLine("BET OR PASS? (BET == 0 / PASS == 1)");
         int n;
         if(!int.TryParse(Console.ReadLine(), out n))
         {
            n = -1;
         } 
         if(n == 0 || n == 1)
         { 
            return n;
         }
         else
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.Error.WriteLine("Invalid Ans!! try again");
             Console.ForegroundColor = ConsoleColor.Gray;
         }
}