【问题标题】:CS50 Wk4 Blur PsetCS50 Wk4 模糊 Pset
【发布时间】:2021-06-02 01:56:10
【问题描述】:
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)

我用 || 运行它运营商,因为我的理解是,在问题的幌子下,如果满足任何这些条件,则无需添加任何块。然而为什么当我在 || 下运行它时它返回分段错误,而如果我用 && 运行它,问题会解决吗?

感谢您的回答!

【问题讨论】:

    标签: cs50


    【解决方案1】:

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

    例如如果i+k &gt; heightimage[i+k] 无效。

    另外我认为你有一些“差一点”的问题。image[height][width] 所以有效值是 [0..height-1][0..width-1] 所以检查应该更像if (i + k &lt; height &amp;&amp; i + k &gt;= 0 &amp;&amp; j + l &lt; width &amp;&amp; j + l &gt;= 0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多