虽然循环不会退出C#

时间:2018-06-12 02:14:52

标签: c# .net

while(!int.TryParse(menuChoice, out menuNumber))
{                
     AlertMessage("You have enetered an invalid choice, please select a correct option! (1-3)", ConsoleColor.Red);
     menuChoice = Console.ReadLine();     
}
while (menuNumber > 3 | menuNumber < 1)
{
     AlertMessage("You have enetered an invalid Number, please select a correct option! (1-3)", ConsoleColor.Red);
     menuChoice = Console.ReadLine();               
}

上面的代码检查用户是否输入了int的有效值以及另一个检查,如果输入的值是int但不在某个范围内,则发送错误。错误即时有一个数字是高于3或低于1它会触发错误并告诉您选择一个有效的选择,如果您在提示后输入有效选项,它仍然会给您相同的错误提示

3 个答案:

答案 0 :(得分:1)

我会建议像:

    public int GetChoice(int MinRange, int MaxRange)
    {
        do
        {
            string menuChoice = Console.ReadLine();
            int menuNumber = -1;
            if (int.TryParse(menuChoice, out menuNumber))
            {
                if (menuNumber >= MinRange && menuNumber <= MaxRange)
                    return menuNumber;
            }
            AlertMessage($"You have enetered an invalid Number, please select a correct option! ({MinRange}-{MaxRange})", ConsoleColor.Red);
        } while (true);
    }

相反,并称之为:

int menuChoice = GetChoice(1,3);

答案 1 :(得分:1)

对于你的直接问题,我建议稍微重构一下。对于退出条件,使用带有布尔值的1循环。在里面测试repsonse并将boolean设置为true或打印错误消息:

bool correct = false;
while (!correct)
{
    if (int.TryParse(menuChoice, out menuNumber) && (menuNumber <= 3 && menuNumber >= 1))
    {
        correct = true;
    }
    else
    {
        AlertMessage("You have enetered an invalid choice, please select a correct option! (1-3)", ConsoleColor.Red);
        menuChoice = Console.ReadLine();
    }

}

你可以更进一步,摆脱解析。只需检查输入的第一个字符是否在适当的范围内:

bool correct = false;
string menuChoice = "";
char choice = '\0';
while (!correct)
{
    menuChoice = Console.ReadLine();
    choice = menuChoice[0];
    if (choice >= '1' && choice <= '3')
    {
        correct = true;
    }
    else
    {
        AlertMessage("You have enetered an invalid choice, please select a correct option! (1-3)", ConsoleColor.Red);
    }

}

答案 2 :(得分:1)

while(!int.TryParse(menuChoice, out menuNumber))
        {                
         AlertMessage("You have enetered an invalid Number, please select a correct option! (1-3)", ConsoleColor.Red);           
            menuChoice = Console.ReadLine();     
    }

在这个循环中,它不会停止,直到你输入字符串或任何非整数的数据类型所以你需要创建你为第二个循环添加的条件

   while(!int.TryParse(menuChoice, out menuNumber) ||( menuNumber > 3 || menuNumber < 1))
     {                
         AlertMessage("You have enetered an invalid Number, please select a correct option! (1-3)", ConsoleColor.Red);
            menuChoice = Console.ReadLine();     
    }

所以当你输入正确的数字(1-3)时它会停止 因为如果输入字符串条件将为真,如果输入数字不在内(1-3)条件将为真