Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要确保值在0-255之间_C++ - Fatal编程技术网

C++ 需要确保值在0-255之间

C++ 需要确保值在0-255之间,c++,C++,这可能真的很容易,但我不知道如何“确保”它在这个范围内 因此,基本上我们有类Color和许多要从中实现的函数 我需要的这个功能是: 效果:将颜色值更正为0-255(含0-255)范围内。如果值超出此范围,则调整为0或255,以较接近者为准 这就是我到目前为止所做的: static int correctValue(int value) { if(value<0) value=0; if(value>255) value=255; }

这可能真的很容易,但我不知道如何“确保”它在这个范围内

因此,基本上我们有
类Color
和许多要从中实现的函数

我需要的这个功能是:

效果:将颜色值更正为0-255(含0-255)范围内。如果值超出此范围,则调整为0或255,以较接近者为准

这就是我到目前为止所做的:

static int correctValue(int value)
{
    if(value<0)
        value=0;
    if(value>255)
        value=255;
}
static int-correctValue(int-value)
{
如果(值255)
数值=255;
}

对不起,这么简单的问题/

很公平。但是你错过了最后的回报声明

static int correctValue(int value)
{
    if(value<0) return 0;
    if(value>255) return 255;
    return value;
}
static int-correctValue(int-value)
{
if(value255)返回255;
返回值;
}

只要在ifs之后返回函数底部的值,就可以了。

您所拥有的一切都可以正常工作。只需在函数末尾返回
。如果您想让它更简洁,可以使用三元表达式,但要牺牲一点可读性:

value = (value < MIN) ?
            MIN : (value > MAX) ?
                    MAX : value;
value=(值最大值)?
MAX:值;

其中
MIN
为0,
MAX
为255。

使用MAX和MIN夹紧非常容易:

value = std::min(255,std::max(0,value))
但是您的方法也应该是正确的。

静态int-correctValue(int-value){
static int correctValue(int value) {
 int correctedValue;
 if (value < 0) {
        correctedValue = 0;
 } else if (value > 255) {
        correctedValue = 255;
 } else {
        correctedValue = value;
 }

 return correctedValue;
int校正值; 如果(值<0){ 修正值=0; }否则如果(值>255){ 修正值=255; }否则{ 修正值=数值; } 返回修正值;

}这很好。我建议制作一个
夹具
功能以实现可重用性:

template <typename T>
void clamp(T& pValue, const T& pMin, const T& pMax)
{
    pValue = std::min(std::max(pValue, pMin), pMax);
}

template <typename T>
T clamp_copy(T pValue, const T& pMin, const T& pMax)
{
    clamp(pValue, pMin, pMax);
    return pValue;
}

我同意其他答案,但有一处修改;这应该是一个else-if语句。如果您已经知道该值小于0,则无需测试该值是否超过255

static unsigned char correctValue(int value)
{
    if(value<0) value=0;
    else if(value>255) value=255;
    return value;
}
静态无符号字符值(int值)
{
如果(值255)值=255;
返回值;
}


使用
无符号字符,而不是使用
int
,该值将无法低于0或高于255。

除了您没有返回修改后的值之外,该函数没有任何问题。事实上,它应该是一个else ifFor值,使用无符号整数类型,因为无论如何不能小于0
unsigned char
应该是最合适的。或者使用
min
max
将其取回。更具可读性的是将功能包装起来。:]说得好。我对三元表达式进行了总体评论。我使用它们,但有些人似乎不喜欢它们。三元表达式过去通过保存一个术语的求值来提高效率,但在优化编译器的这些日子里,它们是否更像是模糊编码竞争对手的一个工具?:)尽管如此,我还是在简单的情况下使用它们,因为我发现它提高了可读性。@Duncan!哈哈,我知道,对吧?在某些情况下,我发现它们实际上比一堆if-else更好地提高可读性。@Duncan:Ternaries用于初始化带有短表达式的
const
对象(对于一些较小的值)。我认为我们应该对他温和一些。他才刚刚开始,让我们不要用泛型蒙蔽他:)@Aran:Meh,这样的函数足够简单,可以作为一个很好的起点请对否决票发表意见?这将是另一个“不要给noobs这么好的工作代码!”的无聊案例吗?否决票不是我的-这是一个好答案,对其他对通用钳形感兴趣的人也会有用。@pax:不,不可能存在两个只在返回类型上不同的函数。这就是为什么一个后缀是
\u copy
:)在我看来,这个函数并不十分复杂,应该作为一个非常基本的模板函数。但是该死的那些意见,总是不同的……a)性病……家庭作业太多了,b)为什么看起来不对?(尽管它是正确的)+1尽管对于这样简单的事情,我可能会执行“if(val<0)return 0;”,而不是设置一个返回值。它足够小,多次返回不会影响可读性。
无符号字符
可能会高于255。我仍然会返回一个
无符号字符
,这样返回类型就可以很明显地表明该值现在包含在
[0255]
中。答案更改了。
static unsigned char correctValue(int value)
{
    if(value<0) value=0;
    else if(value>255) value=255;
    return value;
}