其他分享
首页 > 其他分享> > c – 更改没有大条件块的比较运算符

c – 更改没有大条件块的比较运算符

作者:互联网

我正在测试一个数字是否位于两个值之间.我将其留给用户来选择逻辑比较是否应该包括等于或者两个(或两个)限制.
他们通过定义一个包含两个边值的结构以及要使用的比较运算符来设置它:

typedef struct {
    double low; 
    double high;
    bool low_equal; //false if a greater than operator (`>`) should be used, true if a greater-than-or-equal-to (`>=`) operator should be used
    bool high_equal; //Same as low_equal but for a less-than operator
} Edges;

创建一个边缘阵列(下面称为箱子),并且对于每个输入值,我检查它是否位于箱边缘内.
但是,为了使用所需的一对比较运算符,我最终得到了这个可怕的条件块:

        if (bins[j].low_equal && bins[j].high_equal)
        {
            if (value >= bins[j].low && value <= bins[j].high)
            {
                break;
            }
        }
        else if (bins[j].low_equal)
        {
            if (value >= bins[j].low && value < bins[j].high)
            {
                data[i] = bins[j].value;
                break;
            }
        }
        else if (bins[j].high_equal)
        {
            if (datum > bins[j].low && datum <= bins[j].high)
            {
                break;
            }
        }
        else
        {
            if (value > bins[j].low && value < bins[j].high)
            {
                break;
            }
        }

有一个更好的方法吗?我能以某种方式设置要使用的运算符然后只是调用它们吗?

解决方法:

一个简单的方法可能是:

bool higher = (value > bins[j].low) || (bins[j].low_equal && value == bins[j].low); 
bool lower  = (value < bins[j].high) || (bins[j].high_equal && value == bins[j].high); 

if (higher && lower)
{
    // In range
}

标签:comparison-operators,c,logical-operators
来源: https://codeday.me/bug/20190824/1706676.html