jac*_*nSD 0 c# default infinite-loop while-loop switch-statement
基本的纸牌游戏,在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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题: 您没有阅读用户输入while loop.
如果你没有阅读user inputin while循环它只适用one iteration,如果选择的数字介于1-5它之间就好了,但如果选择的数字是除了1-5它之外的一些东西default case而且你没有阅读userinput它仍然是相同的,所以它将进入infinite loop.
方案:
将以下语句放在while循环中以读取 userInput
userString = Console.ReadLine();
int.TryParse(userString, out userInput);
Run Code Online (Sandbox Code Playgroud)
完整解决方案
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);
}
Run Code Online (Sandbox Code Playgroud)