为什么我的循环和"&&"操作符,但不是"||"或“^”

本文关键字:quot 循环 我的 操作符 为什么 | 更新日期: 2023-09-27 18:18:38

代码询问用户是否吃过东西。然后循环问题,直到输入有效的输入(例如"nothing"或"something")。我的问题是,当我使用"||"运算符时,无论输入什么,循环都在继续。根据我的理解,当用户输入的字符串等于"nothing"、"something"或两者都等于时,循环应该结束,这取决于我使用的操作符。但是只有当我使用"&&"操作符时才会出现这个结果,这让我感到困惑,因为这意味着用户必须输入一个等于"nothing"answers"something"的字符串值。所以我的问题是,为什么我的循环可以使用"&&"操作符,而不能使用"||"或"^"操作符?提前感谢。

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'".");
            }
        }

为什么我的循环和"&&"操作符,但不是"||"或“^”

你的逻辑:

str != 1 || str != 2

可以重写为

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

很明显,其中一条内部语句必须为假,因此整个内部语句将为假。否定总是会使陈述为真。你需要像别人说的那样改变你的逻辑。

用户不能同时输入"nothing"answers"something",所以你的||总是为真。使用&&是正确的逻辑。

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

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

参见De Morgan定律