嵌套While语句不起作用

时间:2013-10-08 20:29:26

标签: c# console

我有一个控制台程序,它根据用户输入的长度和宽度绘制一个形状。完成后。我想询问用户是否要绘制另一种形状,如果是的话。它应该重启程序。此外,当要求用户输入Y表示是或N表示否。我想确保用户不能在这两个字母之外输入。我目前在我的主要方法中使用它。

DrawShape mn = new DrawShape();
mn.ans = "y";
while (mn.ans.ToLower() == "y")
{
    try
    {
        mn.Lenght();
        Console.WriteLine();
        mn.Breadth();
        Console.WriteLine();
        mn.Draw();
        Console.WriteLine("\n");
        mn.Remark();
        Console.WriteLine("\n\nDO YOU WANT TO REDRAW A SHAPE? \nPRESS Y - YES or N - NO");
        mn.ans = Console.ReadLine();
        Console.WriteLine();
        while (mn.ans.ToLower() != "y" || mn.ans.ToLower() != "n")
        {
            Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
            mn.ans = Console.ReadLine();
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("\n" + e.Message);
        Console.WriteLine();
    }
}

这不起作用,因为这是我得到的输出

output

这表明无论我输入什么,仍会显示错误消息。

请问我做错了什么?

1 个答案:

答案 0 :(得分:4)

您使用了错误的运算符,请使用&&代替||

while (mn.ans.ToLower() != "y" && mn.ans.ToLower() != "n") {
        Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
        mn.ans = Console.ReadLine();
}

或者这个:

while (!(mn.ans.ToLower() == "y" || mn.ans.ToLower() == "n")) {
        Console.WriteLine("\nPLEASE PRESS Y - YES or N - NO");
        mn.ans = Console.ReadLine();
}

注意:您应该将mn.ans.ToLower()存储到变量中以避免重复的代码。 您还可以尝试使用Equals方法,该方法支持通过传入的StringComparison.CurrentCultureIgnoreCase对字符串不区分大小写进行比较。