在C中退出2D数组时遇到问题

时间:2014-10-07 17:36:13

标签: c arrays

我正在创建一个频率计数器。基本上,有一堆数字的数组(testArray)。我需要处理这些数字并将它们插入另一个数组(probabilityArray)。 probabilityArray也是2D数组,第一行是测试数组中的唯一元素,第二行是唯一数字出现的次数(例如probabilityArray[2][5]表示数字的频率在probabilityArray[1][5]发生)。我在退出行循环时遇到问题,我不明白为什么。

#include <stdio.h>
#include <stdlib.h>

int histogram() {

}

int entropy() {

}

int main() {
    int i, j, k, found = 0, currentPosition = 0, l = 0, x = 0, y = 0;
    int testArray[10][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 
                 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 
                 {11, 12, 13, 14, 15, 16, 17, 18 ,19, 20}, 
                 {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, 
                 {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, 
                 {21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, 
                 {21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
                 {21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, 
                 {21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, 
                 {21, 22, 23, 24, 25, 26, 27, 28, 29, 30}};

    int row = sizeof(testArray) / sizeof(testArray[0]);
    int col = sizeof(testArray[0]) / sizeof(testArray[0][0]);
    int elements = (row * col);

    printf("Elements: %d\n", elements);
    //printf("Rows: %d\nCols: %d\n", row, col);

    int probabilityArray[3][elements];

    for(x = 0; x < 3; x++) {
            for(y = 0; y < elements; y++) {
            //printf("X: %d\tY: %d\t", x, y);
                    probabilityArray[x][y] = 0;
        }
        //printf("\n");
    }

    //printf("Got here\n");

    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            printf("%d\n", l);
            l++;
            int temp = testArray[i][j];
            for (k = 0; k < currentPosition; k++) {
                if (probabilityArray[1][k] == temp) {
                    //Element is not unique, increase occurance counter
                    printf("NOT UNIQUE: %d\n", temp);
                    probabilityArray[2][k]++;
                    found = 1;
                    break;
                }
            }
            if (found == 0) {
                //Element is unique, add it to array
                printf("FOUND: %d\n", temp);
                probabilityArray[1][currentPosition] = temp;
                probabilityArray[2][currentPosition]++;     
                currentPosition++;      
                printf("Current Position: %d\n", currentPosition);  
            }
            found = 0;
        }
        printf("I: %d\tC: %d\n", i, j);
    } 
    for (i = 0; i < currentPosition; i++) {
        probabilityArray[3][i] = (int)((probabilityArray[2][i] / elements) * 100);
    }

    for (i = 0; i < currentPosition; i++) {
        printf("ELEMENT: %d\t\tFREQUENCY: %d\t\tPROBABILITY:%d\n", probabilityArray[1][i], probabilityArray[2][i], probabilityArray[3][i]);
    }
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您正在使用索引123,您可能希望使用012

下面:

            if (probabilityArray[1][k] == temp) {  // Should it be 0??
                //Element is not unique, increase occurance counter
                printf("NOT UNIQUE: %d\n", temp);
                probabilityArray[2][k]++;          // Should it be 1??

在这里:

            probabilityArray[1][currentPosition] = temp; // Should it be 0??
            probabilityArray[2][currentPosition]++;      // Should it be 1??

在这里:

    probabilityArray[3][i] = (int)((probabilityArray[2][i] / elements) * 100);
    // Should it be  2      and                      1 ??

在这里:

    printf("ELEMENT: %d\t\tFREQUENCY: %d\t\tPROBABILITY:%d\n",
           probabilityArray[1][i], probabilityArray[2][i], probabilityArray[3][i]);
    // Should be be 0, 1, and 2

修复这些可能会解决您的问题。