繁体   English   中英

c# Switch Case 不工作并提示“输入字符串的格式不正确”

[英]c# Switch Case not working and says "Input String was not in a correct format"

当我使用 switch case 运行我的代码时,我试图结束这个过程。

完整代码:

int[] Slots = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

while (true)
{

    Console.WriteLine("Please enter the number of the slot (1-10)");

    
    int Slot = Convert.ToInt32(Console.ReadLine());
    if (Slots[Slot - 1] == 0)
    {
        Slots[Slot - 1] = 1;
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Reservation Successful!");
    }
    else if (Slots[Slot - 1] == 1)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Slot preoccupied.");
    }

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("(R)eserve another slot, (C)heck available slots or (E)nd Process?");

    char choice = Convert.ToChar(Console.ReadLine());

    switch (choice)
    {
        case 'E':
        case 'e':
            break;
        case 'C':
        case 'c':
            Console.WriteLine("The available slots are:");
            for (int i = 0; i < Slots.Length; i++)
            {
                if (Slots[i] == 0)
                    Console.WriteLine("{0}", i + 1);
            }
            continue;
        case 'R':
        case 'r':
            continue;
       
        default:
            Console.WriteLine("Invalid Input");
            break;
    }
}

除了“E”案例外,一切正常。

每当我尝试使用“E”大小写时,它都不会执行 break 命令。 相反,它精确定位到该行:

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

它说“输入字符串的格式不正确”,当我尝试执行系统建议的操作时,即将“int”更改为“var”。 它只是告诉我将其改回“int”。

我很困惑,我不知道那是什么意思。 我是一名学生,这还没有教给我们,所以我不知道该怎么做。

我希望它能工作,因为当我尝试运行我的代码时它没有给出任何错误,并且除了“E”情况外一切正常。

您似乎认为,switch case 中的“break”会退出 while 循环,但是 break 只会退出 switch case。

你得到的错误来自于没有退出你的 while 循环。 然后循环再次执行并读取一个无法解析为 int 的空行。 这意味着您尝试解析为 int 的输入字符串不是实际的 integer(空行不是整数)。

你应该做的是:

bool isRunning = true;
while(isRunning)
{
    //your logic
    switch(choice)
    {
        case 'E':
        case 'e':
            isRunning = false;
            break;
    }
}

开关内部的break会导致控件仅断开开关。 因此,您需要另一个break来跳出 while 循环。 最简单的方法是使用一个额外的 boolean 变量,该变量在“E”情况下切换。 切换后,测试是否设置了变量,如果是,则跳出循环。

int更改为var并返回的建议基本上只是一种编码风格建议,没有进一步的意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM