C - Entering values for 2d Array using for loop produces different values than entered

时间:2017-07-10 15:16:57

标签: c arrays

I have this simple program I am working on in class, it initialized a 3x5 2d Array of integers whose values are inputted for each cell by the user. The program then calls a function which runs through the array with a for loop to display each value, then calls a function which again uses a for loop to double every value, and calls the previous display function to show the array again.

All of this seems to be working, however I am consistently getting odd outputs for certain areas when initializing the values for the 2dArray.

For example: Entering 5 rows of "1, 2, 3" and then calling the display function produces this as output:

1,1,2,
1,2,3,
1,2,3,
1,2,5,
1,2,3

Further more, the doubling function produces further strange results but only in the areas where the output was different from what the user had inputted. Output of the double function on the array I just posted displays as:

2,4,8
2,4,6
2,4,6
2,4,10,
4,8,6

The only real mathematical operation in the entire program is in the doubling functions, where it runs through a for loop setting the value of "array[j][i] = (array[j][i] = array[j][i] * 2)"

I cannot for the life of me figure out which part of the program I've written would cause the user inputs to change to what has been displayed. Inputting values other than "1,2,3" produces similarly odd results. Anyone have any idea what is wrong here? I feel like it must be a very simple mistake I am missing. Here is my source code:

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

void displayArray(int array[][4]);
void doubleArray(int array[][4]);


int main() {

    int dArray[2][4];
    int i, j, k;

    for(i = 0; i <= 4; i++){
        for(j = 0; j <= 2; j++){
            printf("Enter a value for the array at position %d,%d.\n", j, i);
            scanf("%d", &dArray[j][i]); 
        }
    }
    printf("Displaying your original array...\n");
    displayArray(dArray);
    printf("Doubling your array...\n");
    doubleArray(dArray);
    printf("Displaying your doubled array....\n");
    displayArray(dArray);
    system("pause");

}

void displayArray(int array[][4]){
    int i, j;

    for(i = 0; i <= 4; i++){
        printf("\n");
        for(j = 0; j <= 2; j++){
            if(j == 2 && i == 4){
                printf("%d", array[j][i]);
            }
            else{
                printf("%d,", array[j][i]);
            }
            //system("pause");
        }
    }
    printf("\n");
}

void doubleArray(int array [][4]){
    int i, j;

    for(i = 0; i <= 4; i++){
        for(j = 0; j <= 2; j++){
            array[j][i] = (array[j][i] * 2);
            //printf("%d\n", array[j][i]);
        }
    }
}

It's all in one .c file, and I am using devc++ if that makes any difference.

1 个答案:

答案 0 :(得分:0)

要计算2D C阵列的DIMENSIONS,您必须计算有多少列和多少行。在您的示例中,它是3列和5行,这些是您必须在数组定义中输入的值:    int array [3] [5]

然后,因为C开始使用0偏移量进行索引,所以可以使用0到2列(即3列)和0到4行(即5行)来引用数组的元素。正如其他人所说,这可以通过“低于限制”来实现(正确:列为&lt; 3,行为&lt; 5)而不是“低于或等于限制”(不正确,超出界限: &lt; = 3表示列,&lt; = 5表示行。

相关问题