为什么我的循环使用“&&”运算符但不是“||”还是“^”?

时间:2014-08-19 17:08:15

标签: c# struct while-loop boolean-logic

代码询问用户他/她是否吃过东西。然后它循环问题直到输入有效输入(例如"没有"或"某些")。我的问题是当我使用" ||"操作员,无论输入什么,循环都会继续。根据我的理解,当用户输入的字符串等于"没有","某些"或两者都基于我使用的运算符时,循环应该结束。但是这个结果只发生在我使用"&&"运算符,这让我感到困惑,因为这意味着用户必须输入一个等于&#34的字符串值;没有"和"东西"。所以我的问题是为什么我的循环与"&&"运营商但不是" ||"或" ^"运营商?提前致谢。

struct multivar
{
    public int userInt;
    public string userText;
}
class Program
{
    static void Main(string[] args)
    {
        multivar structHolder;
        string shrinkRay = "";
        while ((shrinkRay != "nothing") || (shrinkRay != "something"))
        {
            Console.WriteLine("What did you eat today?\n1)Nothing?\n2)Something?");
            structHolder.userText = Console.ReadLine();
            shrinkRay = structHolder.userText.ToLower();
            if ((shrinkRay != "nothing") || (shrinkRay != "something"))
            {
                Console.WriteLine("Please input a valid response such as \"Nothing\" or \"Something\".");
            }
        }

3 个答案:

答案 0 :(得分:2)

用户不能同时输入“无”和“某事”,你的||永远都是真的。这只是使用&&。

的正确逻辑

答案 1 :(得分:2)

你的逻辑:

str != 1 || str != 2

可以改写为

!(str == 1 && str == 2)

其明显的一个内部语句必须是false,因此整个内部语句将是false。否定将使陈述真实,永远。你需要像其他人所说的那样改变你的逻辑。

答案 2 :(得分:0)

(shrinkRay != "nothing" && shrinkRay != "something")

或者

!(shrinkRay == "nothing" || shrinkRay == "something")

请参阅De Morgan's laws