【问题标题】:While statement ignoring response valuewhile 语句忽略响应值
【发布时间】:2012-07-23 22:27:22
【问题描述】:

我有一个命令行要求用户说 (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();
        }
    }
}

【问题讨论】:

  • 做了更多的研究并最终选择了 while (!response.equals("Y"))

标签: c# command-line if-statement while-loop console-application


【解决方案1】:

OR 更改为AND 逻辑运算符:

(response != "Y") && (response != "N")

【讨论】:

    【解决方案2】:
    while ((response != "Y") || (response != "N"))
    

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

    【讨论】:

      【解决方案3】:

      您的((response != "Y") || (response != "N")) 始终是true

      【讨论】:

      • 现在我大声说出来,这完全有道理。感谢您指出这一点。
      【解决方案4】:

      好的。如果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);
      }
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 是的,我被它弄糊涂了,我让它在进入循环之前把值写出来。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 2017-08-11
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        相关资源
        最近更新 更多