布尔和逻辑运算符使用字符,组合多个测试

时间:2014-09-14 23:42:27

标签: c++ char boolean logical-operators

我遇到布尔和逻辑运算符的问题。我试图让wantsToppings评估为true,如果配对等于'T''t',但此代码的评估结果为true,无论用户输入如何。我不确定我错过了什么,但我知道我得错过一些东西。

感谢您的帮助。

cout << "Toppings wanted (T for toppings/N for no toppings)? ";
cin >> toppings;

if (toppings == 't' || 'T'){
    wantsToppings = true;
} else {
    wantsToppings = false;
}

2 个答案:

答案 0 :(得分:3)

您缺少逻辑运算符的工作方式。这是你做的:

if (toppings =='t' || 'T')

以及它是如何完成的:

if (toppings =='t' || toppings == 'T')

你也不需要if的复杂性,它可能只是:

wantsToppings = (toppings == 't' || toppings == 'T');

答案 1 :(得分:1)

表达式

if (toppings == 't' || 'T')

并不意味着toppings't''T',而是基本上(一旦你考虑了延迟评估,它实际上比这更复杂):< / p>

  • 评估每个子表达式(表达式toppings == 't'和表达式'T'
  • 如果需要,将这些表达式的结果转换为布尔值
  • 执行上述布尔值的逻辑或(||

现在'T'char,它被提升为布尔值true,因此结果始终为真。

正如其他人所指出的,你正在寻找的表达是

if (toppings == 't' || toppings == 'T')