首先,我是编程和c#的完全新手。所以这就是我的困境。
用户只应输入一个号码,输入其他任何内容都应该失败并重复提问。
我一直在使用try catch但是,一旦错误被抛出,用户就没有第二次机会再次输入数字,我只是得到一个错误并且ConsoleApp关闭。
这是我的代码atm
static public int AskInt(string question)
{
try
{
Console.Write(question);
return int.Parse(Console.ReadLine());
}
catch (Exception)
{
throw new FormatException("Please Enter a Number");
}
}
提前谢谢你。
答案 0 :(得分:4)
static public int AskInt(string question)
{
int answer = 0;
bool successfullyParsed = false;
do
{
Console.Write(question);
successfullyParsed = int.TryParse(Console.ReadLine(), out var parsedAnswer);
if(!successfullyParsed){
Console.WriteLine("Only Numbers, dude");
}
answer = parsedAnswer;
} while (!successfullyParsed);
return answer;
}
解释一下。 TryParse将返回一个指示操作成功的布尔值和一个带有结果的out变量。
我无法返回parsedAnswer,因为它位于do循环的上下文中。 你可以使这段代码不那么清晰但简短。我试图说明为什么要有点自我解释。
答案 1 :(得分:1)
使用以下代码,使用TryParse
int
来解析输入的字符串。如果TryParse成功,那么它将打破while
循环。
public static int AskInt(string question)
{
int questionId;
while (true)
{
Console.Write(question);
string input = Console.ReadLine();
if (int.TryParse(input , out questionId))
{
break;
}
}
}
答案 2 :(得分:0)
int i=1;
while(i==1)
{
try {
Console.WriteLine("your question");
int number= int.Parse(Console.ReadLine());
i=0;
}
catch (Exception)
{
i=1;
Console.WriteLine("Please Enter a Number");
}
}
答案 3 :(得分:0)
static public int AskInt(string question)
{
for (;;)
{
Console.Write(question);
if (int.TryParse(Console.ReadLine(), out int result))
{
return result;
}
}
}