未输入任何值时程序崩溃

本文关键字:程序 崩溃 任何值 输入 未输 | 更新日期: 2023-09-27 18:23:53

我创建了一个程序,遇到了一个问题。 当我调试程序并且不输入值(例如数字(并按几次 Enter 按钮时,程序最终崩溃。我想知道是否有可以实施的验证规则,以便在未输入任何值时程序不会崩溃。

int userChoice;
static void Main(string[] args)
{
    new Program().Welcome();
}

public void Welcome()
{
    Console.WriteLine("                       HELLO");
    Console.ReadLine();
    Main_Menu();
}
private void Main_Menu()
{
    Console.WriteLine("1). Welcome");
    Console.WriteLine("2). Help Facilities");
    Console.WriteLine("3). Exit");
    userChoice = Convert.ToInt16(Console.ReadLine());
    Options();
}
private void Options()
{
    if (userChoice == 1)
    {
        Console.Clear();
        Console.WriteLine("Welcome.....................");
        Console.ReadLine();

    }
    if (userChoice == 2)
    {
        Console.Clear();
        Console.WriteLine("Help.........................");
        Console.ReadLine();
    }
    if (userChoice == 3)
    {
        //if user selects option 3 the program will exit 
    }

未输入任何值时程序崩溃

不要只是解析,使用 try parse 来验证它是否是一个数字。

以下是整数类型(整数(的一些简写

  • 长 = Int64
  • int = int32
  • 短 = Int16
  • 字节 = (如果存在的话,Int8 是什么(

因此,只需使用速记,它们更具可读性,因为它们更明显。

int t;
if(int.TryParse(Console.ReadKey(),out t){
//Do work with the number t
}
else{
//Handle a non numerical input
}

使用此Main_Menu()方法代替您的方法。您将获得流畅的输出。

    private void Main_Menu()
        {
            Console.WriteLine("1). Welcome");
            Console.WriteLine("2). Help Facilities");
            Console.WriteLine("3). Exit");
            string userChoiceSTR = Console.ReadLine();
            if (!string.IsNullOrEmpty(userChoiceSTR))
            {
                userChoice = Convert.ToInt16(userChoiceSTR);
                try
            {
                Options();
            }
            catch
            {
                Console.WriteLine("Did not put any value. Please Select a menu: ");
                Main_Menu();
            }
            }
            else {
                Console.WriteLine("Did not put any value. Please Select a menu: ");
                Main_Menu();
            }
        }

如果你把一个空字符串放进Convert.ToInt16它会抛出一个FormatException。因此,最好尝试将输入解析为整数,并在出现问题时让用户重新输入。

short s;
while (!short.TryParse(Console.ReadLine(), out s))
{
    Console.WriteLine("Input invalid. Retry.");
}

(自从您在示例代码中使用short以来,我一直使用过。就个人而言,我通常会选择int(