由于某种原因,我的代码似乎为我的输出行之一生成了零,虽然不能完全确定问题出在哪里,但我认为这可能与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);

或使用从intdouble的显式转换。

10-04 14:58