用户应输入int,如果输入任何其他内容则重复

时间:2018-06-01 04:18:56

标签: c# .net

首先,我是编程和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");
    }
}

提前谢谢你。

4 个答案:

答案 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;
        }
    }
}