1

我有一个命令行要求用户说(Y/N),这个值被传递给 checkResponse 方法。

出于某种原因,while 循环会忽略该值,即使在我调试时它显示的值为“Y”。当值设置为“N”时,它也会继续循环。如果我将 if 语句移到 while 语句下方,程序就可以正常工作。我可以发送一个初始值“Y”,while 语句将忽略它并开始运行其中的代码。

知道我错过了什么或忽略了什么吗?

提前致谢。

public void checkResponse(string response, string confirmValue)
{
    Console.WriteLine(response);
    Console.WriteLine(response);
    if (response == "Y")
    {
        return;
    }
    else if (response == "N")
    {
        Environment.Exit(0);
    }
    else
    {
        while ((response != "Y") || (response != "N"))
        {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
        }
    }
}
4

5 回答 5

11

更改ORAND逻辑运算符:

(response != "Y") && (response != "N")
于 2012-07-25T13:19:15.933 回答
4

((response != "Y") || (response != "N"))的永远是true

于 2012-07-25T13:19:35.030 回答
3
while ((response != "Y") || (response != "N"))

永远是正确的,因为响应不能同时是 Y 和 N。

于 2012-07-25T13:19:31.190 回答
0

行。如果while循环终止怎么办?我们希望它再次检查:

public void checkResponse(string response, string confirmValue)
{
Check:
    Console.WriteLine(response);
    Console.WriteLine(response);
    if (response == "Y")
    {
        return;
    }
    else if (response == "N")
    {
        Environment.Exit(0);
    }
    else
    {
        while ((response != "Y") && (response != "N"))
        {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
        }
        goto Check;
    }
}

或更好:

public void checkResponse(string response, string confirmValue)
{
    Console.WriteLine(response);
    while (response != "Y" && response != "N")
    {
            Console.Clear();
            Console.WriteLine("\"" + response + "\" is not a valid response.");
            Console.WriteLine();
            Console.WriteLine("You entered:" + confirmValue);
            Console.WriteLine("Is this correct? (Y/N)");
            response = Console.ReadLine().ToUpper();
    }
    if (response == "N")
           Environment.Exit(0);
}
于 2012-07-25T13:21:17.493 回答
0

你确定输入也是大写的吗?您可以使用equals方法并忽略大小写。

message.Equals("Y", StringComparison.InvariantCultureIgnoreCase);

编辑:虽然这对于使用 or 而不是 and 的错误可能更好,但这是您的实际问题。

于 2012-07-25T13:21:57.003 回答