CS50 pset4滤镜灰度轮功能问题

问题描述

我正在研究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语言的新手,所以我的功能可能有问题。我尝试使用Google搜索,但没有任何意义。我有

 #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 av = (image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3.0

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...