为什么我的循环和"&&"操作符,但不是"||"或“^”
本文关键字: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定律