由于某种原因,我的代码似乎为我的输出行之一生成了零,虽然不能完全确定问题出在哪里,但我认为这可能与int和double值之间的差异以及它们何时进行转换有关。
在这种情况下,无论初始输入是什么,“标准化表示”的值-reN2,grN2,blN2都会产生0。我不确定自己在做什么错。
让我知道变量名是否有任何混淆。这是一项家庭作业,不会由一个人评分,因此我不认为使变量有更多不同,因为只有我能看到它们。
case'd':
double red2, green2, blue2;
cout << "Input r, g, b: ";
cin >> red2 >> green2 >> blue2;
int reI, grI, blI;
reI = red2*255;
grI = green2*255;
blI = blue2*255;
cout << "Integer representation: " << reI << ", " << grI << ", "
<< blI;
cout << endl;
if(reI > grI && reI > blI && green2 != blue2)
cout << "Reddish pixel";
else if(grI > reI && grI > blI && red2 != blue2)
cout << "Greenish pixel";
else if(blI > reI && blI > grI && green2 != red2)
cout << "Blueish pixel";
else if(blue2 == 0.0 && red2 == 0.0 && green2 == 0.0)
cout << "Black pixel";
cout << endl;
if((reI+grI+blI) != 0)
{
double reN2, grN2, blN2;
reN2 = reI/(reI+grI+blI);
grN2 = grI/(reI+grI+blI);
blN2 = blI/(reI+grI+blI);
cout << "Normalized representation: " << reN2 << ", " << grN2
<< ", " << blN2;
}
break;
最佳答案
reI, grI, blI
是整数。当您对它们执行运算时,它们将被视为整数,并且C++不会自动确定要使用浮点除法而不是整数除法。
强制自动转换的一种惰性方法是在分子中添加* 1.0
:reN2 = reI * 1.0 / (reI + grI + blI);
。
或使用从int
到double
的显式转换。