cs50 pset4滤镜灰度圆函数问题

Cs50 pset4 filter grayscale round function problem

我正在研究 cs50 pset4 过滤器(不太舒服)灰度,如果数字是小数,我必须四舍五入。但出于某种原因,check50 打印如下:

:( grayscale correctly filters single pixel without whole number average
    expected "28 28 28\n", not "27 27 27\n"

:( grayscale correctly filters more complex 3x3 image
    expected "20 20 20\n50 5...", not "20 20 20\n50 5..."

:( grayscale correctly filters 4x4 image
    expected "20 20 20\n50 5...", not "20 20 20\n50 5..."

这些只是悲伤的面孔。这是我的代码:

void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
    for(int j = 0; j < width; j++)
        for(int i = 0; i < height; i ++) {
            double av = (image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3;
            int average = round(av);
            image[i][j].rgbtGreen = average;
            image[i][j].rgbtRed = average;
            image[i][j].rgbtBlue = average;
        }
}

圆函数在这里:

 int average = round(av);

但根据 check50,它不起作用。请帮我弄清楚。我唯一的怀疑是我是 c 的新手,所以我的函数可能有问题。我试着用谷歌搜索,但没有任何意义。我有

 #include<math.h>

我的代码中的部分,就在我向您展示的部分上方。

谢谢, 迷失在代码中:)

好像是除法的结果

(image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3

被截断,因为所有成员都是整数。

尝试

(image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3.0

(使用 3.0 而不是 3

使用 float

而不是使用 double 数据类型
float av = (image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3.0

并使用 3.0,因为在某些情况下您的值可能是整数,因此它不会四舍五入到最接近的整数