2012-11-16 199 views
0
string confirm = ""; 

        while (confirm != "y" || confirm != "n") 
        { 
         Console.Write("Remove {0}' account? (Y/N): ", Accounts[accountNumber].Name); 
         confirm = Console.ReadLine(); 
         confirm = confirm.ToLower(); 
        } 

由于某些未知原因,我的循环检查失败。即使确认IS是“n”还是“y”,它仍会再次循环。我甚至通过使用断点检查它是否与“n”或“y”匹配。那么,为什么每次都会失败?为什么这个循环永远?

+0

你的意思是它总是在循环中,或者它永远不会在循环中? –

回答

0

因为你的字符串不能是yn。更换||&&

while (confirm != "y" && confirm != "n") 
1
while (confirm != "y" || confirm != "n") 

您将循环,而你的字符串是要么y,或NOT n。如果它是n,那么它不是y,反之亦然。你无法同时满足两个条件!

你需要

while (confirm != "y" && confirm != "n") 

这将是满意的,如果你的字符串是其他东西比yn

+0

哇,做出一个愚蠢的错误哈哈,谢谢 – DrOstler

0

这是一个错误的逻辑:例如,如果确认是“Y”,它不等于“N”,所以它会在你的循环反正进入。

这样做:

while (!(confirm == "y" || confirm =="n")){ 
... 
} 
0

DrOstler,

你的逻辑是错误的。

对我来说如果你用二进制来思考,ir会有所帮助。

0 OR 0是唯一的假的,而0 OR 1,1 1或1 OR 0全部为真。 0或0表示您的答案必须是y和n,这是不可能的。

你需要的是使用AND运算符(& &)或使用相等而不是否定。

while (confirm != "y" && confirm != "n") 

只有在答案既不是y也不是n的情况下,这只会循环。

OR

while (confirm == "y" || confirm == "n") 

如果答案是y或n,这只是循环。

提示:Google摩根法则!