C 如何使此程序返回它所返回的值';应该是吗?

C 如何使此程序返回它所返回的值';应该是吗?,c,cs50,C,Cs50,程序应该获取像素周围的每个像素和平均颜色值。 它看起来在视觉上工作得很好,但显然不是,因为它没有通过测试。它通过的唯一测试是“角落里的像素” 如果能给我一些关于bug可能在哪里的提示,我将不胜感激。 代码如下: //iterate through each row and column for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) {

程序应该获取像素周围的每个像素和平均颜色值。 它看起来在视觉上工作得很好,但显然不是,因为它没有通过测试。它通过的唯一测试是“角落里的像素”

如果能给我一些关于bug可能在哪里的提示,我将不胜感激。 代码如下:

  //iterate through each row and column
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            /*create variables to define 3x3 box for each pixel
            also create variables to store sum of each colour values for all elements of each box*/
            int highi = i + 1;
            int highj = j + 1;
            int counter = 0;
            int blue = 0;
            int red = 0;
            int green = 0;
            //iterate through each element of newly created box and add sums of colour values
            for(int lowi = i-1 ; lowi <= highi; lowi++)
            {
                if(lowi < 0)
                {
                    lowi = i;
                    
                }
                
                for (int lowj = j-1 ; lowj <= highj; lowj++)
                {
                    if(lowj < 0)
                    {
                        lowj = j;
                        
                    }
                      
                    blue += image[lowi][lowj].rgbtBlue;
                    red += image[lowi][lowj].rgbtRed;
                    green += image[lowi][lowj].rgbtGreen;
                    counter++;
                }
            //calculate average of colour values for each pixel    
            image[i][j].rgbtBlue = blue/counter;
            image[i][j].rgbtRed = red/counter;
            image[i][j].rgbtGreen = green/counter;
            }
//遍历每一行和每一列
对于(int i=0;i对于(int-lowi=i-1;lowi而言,问题在于OP正在写入他的
图像[]]在读取第一次读写时,它会导致错误。

因为你在扫描它的时候把新的值写回到图像上,你的未来像素值会被破坏。考虑把你的新的平均值写入内存中的一个新的位置,而不是在现有的图像上。你正在计算P。当i或j为0时,会出现两次ixels。@斯塔克这是我的想法之一,但我很困惑,为什么它会通过“角点像素”检查,其中i或j肯定为0,而不会通过“中间像素”检查。根据调查结果,我的值似乎是和除以8,而不是9。@Michael Dorgan它正在向新位置i t写入辛克。我复制的部分是唯一一个将值写入新位置的函数到分离程序。除非你建议为每个平均值创建新变量,并在同一个函数中将它们写入每个像素?斯塔克@Michael Dorgan谢谢大家,我已经用你们的提示更改了代码,现在它正在工作。我甚至不知道如何让你你的答案会出现在主线程中,而不是评论,或者在我刚开始使用stackoverflow时向上投票。