我可以在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;
}
}
如果您只需要0
或1
,则只读取一个字符:
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;
}
}