CS50 Wk4 模糊 Pset

时间:2021-05-30 12:33:10

标签: cs50

void blur(int height, int width, RGBTRIPLE image[height][width])
{
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int red_total = 0;
            int blue_total = 0;
            int green_total = 0;
            int number_counted = 0;

            for (int k = -1; k <= 1; k++)
            {
                for (int l = -1; l <= 1; l++)
                {
                    if (i + k <= height && i + k >= 0 && j + l <= width && j + l >= 0)
                    {
                        blue_total += image[i+k][j+l].rgbtBlue;
                        red_total += image[i+k][j+l].rgbtRed;
                        green_total += image[i+k][j+l].rgbtGreen;
                        number_counted ++;
                    }
                }
            }

            image[i][j].rgbtBlue = blue_total / number_counted;
            image[i][j].rgbtRed = red_total / number_counted;
            image[i][j].rgbtGreen = green_total / number_counted;

        }

    }
    return;
}

为什么那个部分是 && 运算符?

 if (i + k <= height && i + k >= 0 && j + l <= width && j + l >= 0)

我用 || 运行它操作员,因为我的理解是,如果满足这些条件中的任何一个,则在问题的幌子下,没有要添加的块。然而,为什么当我在 || 下运行它时它返回分段错误,而如果我使用 && 运行它,问题会解决吗?

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

所有这些条件都必须为真,否则数组操作将无效。

例如如果 i+k > heightimage[i+k] 无效。

此外,我认为您有一些“一成不变的问题。image[height][width],因此有效值是 [0..height-1][0..width-1],因此检查应该更像是 {{ 1}}