C++ 而循环不';我不能同时遵守这两个条件
这两个条件检查的不是同一件事吗 当C++ 而循环不';我不能同时遵守这两个条件,c++,while-loop,conditional-statements,C++,While Loop,Conditional Statements,这两个条件检查的不是同一件事吗 当nr1为1时,则nr2为2。所以当nr1!=lim1为false,则nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真 不同循环中的两个条件是不相等的。说 while (!(nr1 == lim1 && nr2 == lim2)) { nr1--; nr2--; cout << nr1 << '
nr1
为1
时,则nr2
为2
。所以当nr1!=lim1
为false,则nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真
不同循环中的两个条件是不相等的。说
while (!(nr1 == lim1 && nr2 == lim2))
{
nr1--; nr2--;
cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于
nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
法律还规定
while (!(nr1 == lim1 && nr2 == lim2))
{
nr1--; nr2--;
cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于
nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
您还应该注意,整数没有“无穷大”。所有整数都是有限的。在大多数系统中,int
类型是一个32位有符号整数,这意味着它的范围约为20亿到-20亿。当一个有符号整数在上面或下面流动时,您将有未定义的行为
因此,无限循环的最终结果是未定义的行为。当nr1
为1
时,则nr2
为2
。所以当nr1!=lim1
为false,则nr2!=lim2仍然为true,但由于整个表达式为false(因为逻辑AND),循环结束。这就是逻辑AND的工作原理,两个表达式都必须为真才能使整个表达式为真
不同循环中的两个条件是不相等的。说
while (!(nr1 == lim1 && nr2 == lim2))
{
nr1--; nr2--;
cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于
nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
法律还规定
while (!(nr1 == lim1 && nr2 == lim2))
{
nr1--; nr2--;
cout << nr1 << ' ' << nr2 << endl;
}
!(nr1 == lim1 || nr2 == lim2)
等于
nr1 != lim1 && nr2 != lim2
!(nr1 == lim1 && nr2 == lim2)
您还应该注意,整数没有“无穷大”。所有整数都是有限的。在大多数系统中,int
类型是一个32位有符号整数,这意味着它的范围约为20亿到-20亿。当一个有符号整数在上面或下面流动时,您将有未定义的行为
因此,无限循环的最终结果是未定义的行为。有一个简单的数学公式,叫做德摩根公式,它说
在C++中,用!表示为$$,表示为| |。因此,必须将表达式转换为以下形式
!(nr1==lim1 | | nr2==lim2)与(nr1!=lim1&&nr2!=lim2)相等有一个简单的数学公式,叫做德摩根公式
在C++中,用!表示为$$,表示为| |。因此,必须将表达式转换为以下形式
!(nr1==lim1 | | nr2==lim2)与(nr1!=lim1&&nr2!=lim2)相等
弗斯特
while(nr1!=lim1&&nr2!=lim2)
可以翻译成英语,只要nr1和lim1不同,nr2和lim2不同,就可以保持循环
第二
而(!(nr1==lim1和&nr2==lim2))
可以翻译成英语,只要nr1和nr2分别不等于lim1和lim2,就可以保持循环
代码不能完全按照您的要求执行,因为nr1和nr2被设置为6和7。这意味着在第一个while循环中,nr1将首先到达1,因此将中断循环。相反,对于第二个条件,它将始终计算为真,因为nr1和nr2不可能同时分别等于lim1和lim2,因为nr1和nr2之间的差值为1。实际上这两个条件都做了它们应该做的事情,所以让我们将它们分解
nr1 != lim1 || nr2 != lim2
弗斯特
while(nr1!=lim1&&nr2!=lim2)
可以翻译成英语,只要nr1和lim1不同,nr2和lim2不同,就可以保持循环
第二
而(!(nr1==lim1和&nr2==lim2))
可以翻译成英语,只要nr1和nr2分别不等于lim1和lim2,就可以保持循环
代码不能完全按照您的要求执行,因为nr1和nr2被设置为6和7。这意味着在第一个while循环中,nr1将首先到达1,因此将中断循环。相反,对于第二个条件,它将始终计算为真,因为nr1和nr2不可能同时分别等于lim1和lim2,因为nr1和nr2之间的差值为1
nr1 != lim1 || nr2 != lim2
如果以下两种情况都存在,则此语句为true
:
nr1
不同于lim1
nr2
与lim2
因此,如果至少有一个条件未满足,程序将停止迭代
仅当两个条件都满足时,此语句才为true
。因此,如果至少有一个条件未满足,则语句将变为false
nr1 == lim1 && nr2 == lim2
所以现在如果你颠倒语句,这意味着如果语句是false
,它将是true
。因此,在这个条件下,您告诉您的程序:“只要至少有一个条件不满足,就继续迭代”。换句话说,您的程序将迭代,直到满足这两个条件
如果以下两种情况都存在,则此语句为true
:
nr1
不同于lim1
nr2
与lim2
因此,如果至少有一个条件未满足,程序将停止迭代
仅当两个条件都满足时,此语句才为true
。因此,如果至少有一个条件未满足,则语句将变为false
nr1 == lim1 && nr2 == lim2
所以现在如果你颠倒语句,这意味着如果语句是false
,它将是true
。因此,在这个条件下,您告诉您的程序:“只要至少有一个条件不满足,就继续迭代”。换句话说,你的程序将迭代直到两个条件都满足我昨天花了一整天的时间试图弄清楚,但我就是搞不清楚。可能重复@Someprogrammerdude是的,它不应该停止,因为不是两个数字都是1。其中只有一个是。它应该