我是一个完整的新手,我遇到了一个小问题
我希望用户只能将是或否作为答案。
这就是我想出来的
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");
}
答案 0 :(得分:4)
我怀疑你是否想要抛出异常 - 如果用户放置OK
而不是{{1},则异常 };我建议继续询问直到"是"或"不"阅读:
yes
答案 1 :(得分:3)
如果用户输入了true或false,则此方法仅返回true或false。如果用户输入任何单词,循环将继续询问他输入,直到他输入
y
或n
< / 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...");
}