条件不工作,总是返回第一种情况

Conditional not working, returns first case always

本文关键字:情况 一种 返回 工作 条件      更新时间:2023-10-16

结果打印出'c' 3次,有人知道为什么它总是满足第一个条件吗?

#include <iostream>
using namespace std;

char x(char y)
{
    if (y == 'a' || 'b')
    {
        return 'c';
    }
    else if (y == 'c' || 'd')
    {
        return 'e';
    }
    else
    {
        return 'g';
    }
}

int main()
{
    cout << x('a') << endl;
    cout << x('c') << endl;
    cout << x('p') << endl;
    return 0;
}

您需要的格式为

if (y == 'a' || y == 'b')

这是因为在这个表达式

(y == 'a' || 'b')

计算y == 'a''b'的或,由于'b'不为零,计算结果为true,因此整个表达式计算结果为true

(y == 'a' || true)

这一行:

if (y == 'a' || 'b')

等价于:

if ((y == 'a') || ('b'))

这是因为==运算符的优先级高于||运算符。

由于'b'非零,它的值总是为真,因此(y == 'a' || 'b')的值总是为真。

你需要这样写:

if (y == 'a' || y == 'b')

当然,即使优先级是相反的,

if (y == ('a' || 'b'))

也不是你想要的!

请查看操作符优先级(优先级):http://en.cppreference.com/w/cpp/language/operator_precedence

在你的例子中,条件表达式是:

(y == 'a' || 'b')

因此首先计算"y == 'a'"部分,根据"y"的值可能为真或假。我们把"y=='a'"的值称为"t"。然后表达式被求值为"t || 'b'"在这种情况下,'b'实际上是字符'b'的ASCII码值(98),它肯定大于0,因此布尔表达式的结果始终为真。

为了消除由操作符优先级引起的任何歧义,我认为在求值中使用括号显式表示优先级是一个好习惯。在你的情况下,正如之前的帖子所建议的,它应该是:

if ((y=='a') || (y=='b'))
相关文章: