开关中的默认语句,在while循环中,不中断c#
基本的纸牌游戏,在while循环中有一个switch语句。案例是由用户输入选择的卡号,然后替换。那部分很好用。但是测试默认语句(不是0-5的任何数字),它会进入默认控制台的无限循环。writeline在那里,我不知道为什么它没有中断。在以前嵌套在while循环中的开关中,它对我来说很有效,但我以前的默认设置中从未出现过这种无限循环问题。有什么帮助/提示吗开关中的默认语句,在while循环中,不中断c#,c#,while-loop,switch-statement,default,infinite-loop,C#,While Loop,Switch Statement,Default,Infinite Loop,基本的纸牌游戏,在while循环中有一个switch语句。案例是由用户输入选择的卡号,然后替换。那部分很好用。但是测试默认语句(不是0-5的任何数字),它会进入默认控制台的无限循环。writeline在那里,我不知道为什么它没有中断。在以前嵌套在while循环中的开关中,它对我来说很有效,但我以前的默认设置中从未出现过这种无限循环问题。有什么帮助/提示吗 int userInput; string userString; Console.WriteLine("Would you like to
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;
}
}
问题:您没有在
while循环中读取用户输入
如果你没有在中读取用户输入
,而循环只在一次迭代
中起作用,如果选择的编号在1-5之间,这很好,但是如果选择的编号不是1-5
它会转到默认情况
,因为你没有读取用户输入
它保持不变,因此它将进入无限循环
解决方案:
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);
}
在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);
}
问题:您没有在while循环中读取用户输入
如果你没有在中读取用户输入
,而循环只在一次迭代
中起作用,如果选择的编号在1-5之间,这很好,但是如果选择的编号不是1-5
它会转到默认情况
,因为你没有读取用户输入
它保持不变,因此它将进入无限循环
解决方案:
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);
}
在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);
}
这是因为default
案例不会更改userInput
的值,因此userInput
始终不是0
,循环是无限的。
您可以通过提示用户输入新号码来解决此问题:
default:
Console.WriteLine("Incorrect input, try again");
int.TryParse(Console.ReadLine(), out userInput);
break;
如果您只想修改默认值
案例,则此选项无效。否则,要在每个循环中提示用户输入一个新的数字,请使用Sudhakar的解决方案。这是因为default
案例不会更改userInput
的值,因此userInput
始终不是0
,循环是无限的。
您可以通过提示用户输入新号码来解决此问题:
default:
Console.WriteLine("Incorrect input, try again");
int.TryParse(Console.ReadLine(), out userInput);
break;
如果您只想修改默认值
案例,则此选项无效。否则,要在每个循环中提示用户输入一个新的数字,请使用Sudhakar的解决方案。如果userInput==6
那么while(userInput!=0){Console.WriteLine();}
确实会永远循环。检查StackOverlod答案。如果userInput==6
那么while(userInput!=0){Console.WriteLine();}
确实会永远循环。请检查StackOverlod答案。