在转换工具中以特定值获取输出为“-nan”

时间:2013-12-17 11:26:29

标签: c

我制作了一个简单的工具,将RGB颜色格式转换为CMYK格式。我检查了输入值的在线转换值,我得到正确的输出,除非我输入RGB =(0,0,0),我得到CMY值的输出为“-nan”,而在黑色I得到正确的值,即1.这是编写程序的源代码 -

#include<stdio.h>
#include<math.h>

float max(float,float,float);

int main()
{
    float r,g,b;
    float white,cyan,magenta,yellow,black;
    printf("\nPlease Enter The Values Of Red, Green And Blue");
    scanf("%f%f%f",&r,&g,&b);
    if(r>=0 && r<=255 && g>=0 && g<=255 && b>=0 && b<=255)
    {
    white=max(r/255,g/255,b/255);
    cyan=(white-r/255)/white;
    magenta=(white-g/255)/white;
    yellow=(white-b/255)/white;
    black=1.0-white;

        printf("The Converted Values In CMYK format are Cyan = %f Magenta = %f Yellow = %f Black = %f",cyan,magenta,yellow,black);
}
    else
    printf("\nThe Values Entered Of RGB Colours Are Wrong. Please Recheck Them");

    return 0;
}

float max(float a,float b,float c)
{
    float z;
    if(a==b && b==c)
        z=a;
    else
    z=(a>b)?(a>c?a:c):(b>c?b:c);
    return z;
}

4 个答案:

答案 0 :(得分:2)

如果在nan为0的情况下将0除零,则会得到white。您不能将零除零,因为结果不是数字(那就是{ {1}}代表)。为了避免在nan为0时为案例添加特殊处理。

答案 1 :(得分:2)

你除以零。你期望得到什么结果?

你的代码开头很奇怪,为什么扫描浮动如果你希望它们在8位范围0..255?

在进行除法之前,您需要通过检查值是否为0来防止除法。当它为0时,您需要替换最有意义的值,对于所有CMY组件可能为零。如果white为0,黑色(K)将变为1,这就是你想要的。

答案 2 :(得分:1)

在您的代码中,white为0,您试图除以Zero/Zeronan代表Not A Number。当你试图除以零时,你会得到这个。

white=max(r/255,g/255,b/255);//will return 0 if you enter r = 0.0,g = 0.0,b = 0.0

因此,white将拥有0.0;

cyan=(white-r/255)/white; // here you are doing 0.0/0.0 (white = 0.0, r = 0.0)

答案 3 :(得分:0)

这是''除零''浮点异常的情况。您应该在程序中考虑这种情况以避免它。