当使用用户输入(int)作为多个函数的链接时避免崩溃的方法

本文关键字:链接 函数 方法 崩溃 用户 输入 int | 更新日期: 2023-09-27 18:06:00

我找不到一个明确的答案,如何分配用户输入在其他地方可用作为一个整数,而不会因无效的键输入而使程序崩溃。我也不确定是否将输入设置为整数是一个好主意,因为这是我所知道的唯一方法。下面是代码:

int atkchoice = Convert.ToInt32 (Console.ReadLine());

下面是我想如何使用输入作为一个整数:

if (atkchoice == 1)
                {

当使用用户输入(int)作为多个函数的链接时避免崩溃的方法

如果使用Convert.ToInt32(),如果输入不是数字,可能会得到异常。使用TryParse()方法更安全。

int atkchoice;
do
{
    // repeat until input is a number
    Console.WriteLine("Please input a number! ");
} while (!int.TryParse(Console.ReadLine(), out atkchoice));
Console.WriteLine("You entered {0}", atkchoice);

如果您想验证输入是否在一组数字中,您可以创建一个用户选择的枚举,然后检查输入是否正确。使用枚举。

enum UserChoiceEnum
{
    Choice1 = 1,
    Choice2,
    Choice3
}
void Main()
{
    int atkchoice;
    do
    {
        do
        {
            // repeat until input is a number
            Console.WriteLine("Please input a number! ");
        } while (!int.TryParse(Console.ReadLine(), out atkchoice));
    } while (!Enum.IsDefined(typeof(UserChoiceEnum), atkchoice));
    Console.WriteLine("You entered {0}", atkchoice);
}

请参考这个(链接到stackoverflow中另一个类似的问题)c# char to int。我想它会回答你的大部分疑问。(对于你上面的评论-"谢谢你这工作完美,但现在我很好奇,如果我可以设置它以同样的方式响应其他数字的char输入,允许用户只使用1 2和3。什么方法是最好的?")

如果您有多个值要检查,您可以将它们添加到List并检查该列表是否包含您的值(使用Contains方法)。您可以循环使用while,直到输入有效。

之后,由于您的期望值都是数字,因此您可以使用Convert.ToInt32安全地将输入转换为int

public static void Main(string[] args)
{
    IEnumerable<string> allowedInputs = new[] {"1", "2", "3"};
    string userInput = "";
    while (!allowedInputs.Contains(userInput))
    {
        Console.WriteLine("Enter 1, 2 or 3");
        userInput = Console.ReadLine();
    }
    int atkChoice = Convert.ToInt32(userInput);
    //Do your if conditions
}