我制作了一个简单的工具,将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;
}
答案 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/Zero
。 nan
代表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)
这是''除零''浮点异常的情况。您应该在程序中考虑这种情况以避免它。