C++ 为什么我的工作不应该做';T
为什么布尔值C++ 为什么我的工作不应该做';T,c++,boolean,do-while,C++,Boolean,Do While,为什么布尔值&&在这种情况下工作?当我输入“黄色”时,它不应该“短路”并且不检查第二个条件,因为第一个条件“红色”是错误的吗 #include <iostream> #include <string> using namespace std; int main() { string color; do { cout << "Pick one of the colors: red, yellow, or blue
&&
在这种情况下工作?当我输入“黄色”时,它不应该“短路”并且不检查第二个条件,因为第一个条件“红色”是错误的吗
#include <iostream>
#include <string>
using namespace std;
int main()
{
string color;
do
{
cout << "Pick one of the colors: red, yellow, or blue\n";
cin >> color;
}while ((color != "red") && ( color != "yellow") && ( color != "blue"));
{
cout << "I like that color too";
return 0;
}
}
#包括
#包括
使用名称空间std;
int main()
{
字符串颜色;
做
{
颜色;
}而((颜色!=“红色”)&&(颜色!=“黄色”)&&(颜色!=“蓝色”);
{
cout当color
为“黄色”
时,则(color!=“red”)
为真。因此它检查下一个条件(color!=“yellow”)
,该条件为假。因此该条件为假。第三个测试(color!=“blue”)
不会执行,因为表达式的计算结果已经为false,因此其计算结果被短路
(color != "red") // color == "yellow", so this is true
&& (color != "yellow") // color == "yellow", so this is false
&& (color != "blue")
在和&
案例事件中,如果第一个单一条件评估为假
,则结果将为整个条件评估为假
试试这个解决方案
while ((color != "red") || ( color != "yellow") ||( color != "blue"));
实际上,困惑在于你对这种情况的理解:
color != "red"
当您键入黄色时,它实际上是真实的,因为颜色不是红色,但它在此处短路:
color != "yellow"
由于条件为false,并且由于&&
的操作数必须全部为true,因此它会短路。以下是查看代码的另一种方法:
看看单词while和until是如何相反的,我们可以将do while(x)重写为do until(!x);循环,在循环中迭代,直到条件(!x)为真
用(!x)代替while(x),我们得到
因为ORs只有在条件为真时才会短路,所以当您键入“黄色”时,第一个条件变为假,第二个条件变为真。这会导致短路,然后中断do while()循环并打印“我也喜欢那种颜色”!为什么要使用第二对括号?这是问题的一部分?在整个条件之前,您只需要一个小的!
来纠正它。'因为第一个条件为“红色”是false吗?实际上不是。这可能是整个混乱的根源。这不是问题所在,但代码中有太多括号。在本例中,在诸如color!=“red”之类的简单表达式周围不需要括号
。感谢您的快速回复!我发现了我的误解。提问者似乎一开始就想要这个代码,但这并不是他所问问题的答案;)语法应该是“repeat{}until()“。我没有使用正式的编程约定。我只是使用临时替换来试图澄清问题。你是对的。我添加了一个#define来帮助澄清。事实上,它必须这样做,只有当用户退出循环时才会打印,也就是说,只有当他/她选择红色、黄色或蓝色时才会打印。谢谢,我不知道为什么我会这样做。”用这个简单的概念避免麻烦。
#include <iostream>
#define until(!(x)) while(x)
int main()
{
string color;
do
{
cout << "Pick one of the colors: red, yellow, or blue\n";
cin >> color;
}
until (!((color != "red") && ( color != "yellow") && ( color != "blue")));
cout << "I like that color too";
return 0;
}
until(color == "red" || color == "yellow" || color == "blue");