虽然语句忽略响应值

虽然语句忽略响应值

问题描述:

我有一个命令行要求用户说(Y/N),并将此值传递给checkResponse方法。虽然语句忽略响应值

由于某种原因,while循环忽略了值,即使当我调试它显示的值是“Y”。当值被设置为“N”时,它也继续循环。如果我将while语句移到while语句下面,程序的一半工作。我可以发送一个初始值“Y”,while语句将忽略它并开始运行它内部的代码。

任何想法,我失踪或俯视?

在此先感谢。从OR

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(); 
     } 
    } 
} 
+0

做了一些更多的研究,并结束了与while(!response.equals(“Y”)) – snapplex 2012-07-25 13:48:56

改变为AND逻辑运算:

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

我也喜欢这个解决方案。 – snapplex 2012-07-25 13:49:40

while ((response != "Y") || (response != "N")) 

总是为真,作为响应不能Y和n同时。

((response != "Y") || (response != "N"))总是true

+0

现在我大声说出来,这是非常有道理的。谢谢你指出。 – snapplex 2012-07-25 13:49:28

确定。如果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); 
} 

你确定输入大写呢?您可以使用equals方法并忽略该情况。

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

编辑:虽然这可能是更好的错误与或而​​不是一个是你的实际问题。

+0

是的,我很困惑,我在进入循环之前写出了它的价值。 – snapplex 2012-07-25 13:51:49