C# 用户应输入int,如果输入了其他内容,请重复

C# 用户应输入int,如果输入了其他内容,请重复,c#,.net,C#,.net,首先,我是一个编程和c#方面的完全新手……所以我的困境就在这里 用户只需输入一个数字,其他任何输入都会失败并重复该问题 我一直在使用try-catch,但是一旦抛出错误,用户就没有第二次机会再次输入一个数字,我只会收到一个错误,控制台将关闭 这是我的自动取款机代码 static public int AskInt(string question) { try { Console.Write(question); return int.Parse(C

首先,我是一个编程和c#方面的完全新手……所以我的困境就在这里

用户只需输入一个数字,其他任何输入都会失败并重复该问题

我一直在使用try-catch,但是一旦抛出错误,用户就没有第二次机会再次输入一个数字,我只会收到一个错误,控制台将关闭

这是我的自动取款机代码

static public int AskInt(string question)
{
    try
    {
        Console.Write(question);
        return int.Parse(Console.ReadLine());
    }
    catch (Exception)
    {
        throw new FormatException("Please Enter a Number");
    }
}

先谢谢你

使用下面的代码,它使用
int
TryParse
解析输入的字符串。如果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;
            }
        }
 }

使用下面的代码,它使用
int
TryParse
解析输入的字符串。如果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;
            }
        }
 }
解释一下。TryParse将返回一个表示操作成功的布尔值,并返回一个带有结果的out变量

我无法返回parsedAnswer,因为它位于do循环的上下文中。 您可以使此代码不太清晰,但很短。我试着让这个为什么有点不言自明

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");
        }
}
解释一下。TryParse将返回一个表示操作成功的布尔值,并返回一个带有结果的out变量

我无法返回parsedAnswer,因为它位于do循环的上下文中。
您可以使此代码不太清晰,但很短。我试着让这个为什么有点不言自明

使用tryparse而不是直接浇铸,因为您需要一个循环。try/catch构造没有任何类型的“重试”功能,正如您所期望的那样。当输入有效时,退出循环。如何做到这一点?我在想,当readline不是int时?或者类似的东西。这可能是大量问题的重复使用tryparse而不是直接casting。你需要一个循环。try/catch构造没有任何类型的“重试”功能,正如您所期望的那样。当输入有效时,退出循环。如何做到这一点?我在想,当readline不是int时?或者类似的问题……这可能是许多问题的重复。你为什么不解释一下呢?当答案和实现同样的目标一样好时,为什么需要parsedAnswer呢?很抱歉。只是对这篇文章进行了一些解释。我可以在你的代码中添加一条消息,让用户知道“只允许数字?”顺便说一句,它现在工作得很好。只是用更改进行了编辑。很抱歉之前的评论,它几乎没有变化。你弄坏了它,不管发生什么,“只有数字,伙计”错误消息都会打印出来。你为什么不解释一下?当答案和实现同样的目标一样好时,为什么需要parsedAnswer呢?很抱歉。只是对这篇文章进行了一些解释。我可以在你的代码中添加一条消息,让用户知道“只允许数字?”顺便说一句,它现在工作得很好。只是用更改进行了编辑。抱歉之前的评论,它几乎没有变化。你弄坏了它,不管发生什么,“只有数字,伙计”错误消息都会打印出来。
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");
        }
}