开关中的默认语句,在while循环中,不中断c#

开关中的默认语句,在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

基本的纸牌游戏,在while循环中有一个switch语句。案例是由用户输入选择的卡号,然后替换。那部分很好用。但是测试默认语句(不是0-5的任何数字),它会进入默认控制台的无限循环。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;
    }
}

问题:您没有在
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答案。