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

时间:2013-11-19 09:16:43

标签: c# while-loop switch-statement default infinite-loop

基本的纸牌游戏,在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 个答案:

答案 0 :(得分:6)

问题:您没有在while loop中阅读用户输入。

如果您没有阅读user input循环中的while,则仅适用于one iteration,如果选择的数字介于1-5之间则没有问题,但如果选择的数字是1-5以外的其他内容转到default case,因为您没有阅读userinput,它会保持不变,因此会进入infinite loop

解决方案:

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

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

完整解决方案:

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);
}

答案 1 :(得分:0)

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

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

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