计算C中0和0的2D数组的高度

时间:2016-05-28 14:02:09

标签: c arrays function loops multidimensional-array

我试图编写一个程序来查找"图像的像素高度"。 "图像"是0和0的2D数组,0是白色空间,1是黑色像素。

嵌套循环从左到右穿过数组,首先穿过x轴,然后穿过y轴。

我试图找到y值的最高值。计划是在新数组中将所有y值存储在0以上,并找到最高的y值。但是,由于某种原因,下面的代码只将y = 5存储到数组中。

我认为订单错了?

#include <stdio.h>

#define MAX_X       20
#define MAX_Y       20

void printImage(int image[MAX_X][MAX_Y]);
int countBlackPixels(int image[MAX_X][MAX_Y]);
int findYPixel(int image[MAX_X][MAX_Y]);

//function prototypes

void processImage(int image[MAX_X][MAX_Y]) {

    int yPixel;
    yPixel = findYPixel(image);
    printf("Height: %d\n", yPixel);

}

//Height
//Calculates height of image 

int findYPixel(int image[MAX_X][MAX_Y]) {
    int x, y, yPixel, i;
    int new_array[MAX_Y-1];
    x = 0;
    yPixel=-1;
    while (x < MAX_X) {
        y = MAX_Y-1;
        while (y > 0) {
            if (image[x][y] == 1) {
                yPixel=y;
                }
            y = y - 1;
        }
        x = x + 1;
    }
    return yPixel;
}

有没有人知道我哪里出错了?

1 个答案:

答案 0 :(得分:1)

此循环将数组中的所有值分配给当前y值:

for(i=0; i < MAX_Y; i++) {
    new_array[i] = y;  //store all y values in a new array
}

这就是为什么你最后只得到一个值。

您甚至不需要存储y值的数组。只要在2D阵列中找到第一个非零条目,就可以返回当前y值作为答案。 (这假设您开始在图像的顶部进行搜索并向下工作。)

即使从下往上循环,您仍然不需要数组。每次遇到非零像素时,只需更新yPixel = y;即可。在循环结束时,yPixel将是最高非空白像素的y值。您应该从yPixel = -1或其他东西开始,这有助于您在整个图像为空白时识别出这种情况。