首页 文章

一个开关中的默认语句,在while循环中,没有破坏c#

提问于
浏览
0

基本的纸牌游戏,在while循环中有一个switch语句 . case是用户输入选择的卡号,然后更换 . 那部分工作正常 . 但测试默认语句(任何数字不是0-5),它进入默认的console.writeline的无限循环,我不知道为什么它没有破坏 . 在以前的开关嵌套在while循环中它对我有效,但我从来没有在以前的默认值之前有这个无限循环问题 . 任何帮助/提示?

int userInput;
string userString;
Console.WriteLine("Would you like to replace a card?");
Console.WriteLine("Select which card you would like to replace, 1-5. Enter 0 to skip");
userString = Console.ReadLine();
int.TryParse(userString, out userInput);
while (userInput != 0)
{
    switch (userInput)
    {
        case 1:
            userInput--;
            userHand[userInput] = cardDeck.GetOneCard();
            break;
        case 2:
            userInput--;
            userHand[userInput] = cardDeck.GetOneCard();
            break;
        case 3:
            userInput--;
            userHand[userInput] = cardDeck.GetOneCard();
            break;
        case 4:
            userInput--;
            userHand[userInput] = cardDeck.GetOneCard();
            break;
        case 5:
            userInput--;
            userHand[userInput] = cardDeck.GetOneCard();
            break;
        default:
            Console.WriteLine("Incorrect input, try again");
            break;
    }
}

2 回答

  • 6

    Problem: 您没有在 while loop 中读取用户输入 .

    如果你没有在 while 循环中读取 user input 它仅适用于 one iteration 并且如果选择的数字在 1-5 之间则没有问题但是如果选择的数字是除了 1-5 之外的其他东西它会转到 default case 并且因为你没有阅读 userinput 它仍然存在同样如此,它将进入 infinite loop .

    Solution :

    将以下语句放在while循环中以读取 userInput

    userString = Console.ReadLine();
    int.TryParse(userString, out userInput);
    

    Complete Solution:

    int userInput;
    string userString;
    Console.WriteLine("Would you like to replace a card?");
    Console.WriteLine("Select which card you would like to replace, 1-5. Enter 0 to skip");
    userString = Console.ReadLine();
    int.TryParse(userString, out userInput);
    while (userInput != 0)
    {
        switch (userInput)
        {
            case 1:
                userInput--;
                userHand[userInput] = cardDeck.GetOneCard();
                break;
            case 2:
                userInput--;
                userHand[userInput] = cardDeck.GetOneCard();
                break;
            case 3:
                userInput--;
                userHand[userInput] = cardDeck.GetOneCard();
                break;
            case 4:
                userInput--;
                userHand[userInput] = cardDeck.GetOneCard();
                break;
            case 5:
                userInput--;
                userHand[userInput] = cardDeck.GetOneCard();
                break;
            default:
                Console.WriteLine("Incorrect input, try again");
                break;
        }
          Console.WriteLine("Select which card you would like to replace, 1-5. Enter 0 to skip");
          userString = Console.ReadLine();
          int.TryParse(userString, out userInput);
    }
    
  • 0

    这是因为 default 情况不会更改 userInput 的值,因此 userInput 始终不是 0 且循环是无限的 . 您可以通过提示用户输入新号码来修复它:

    default:
        Console.WriteLine("Incorrect input, try again");
        int.TryParse(Console.ReadLine(), out userInput);
        break;
    

    如果您只想修改 default 案例,请执行此操作 . 否则,要在每个循环中提示用户输入新号码,请使用Sudhakar的解决方案 .

相关问题