在C中打印来自多维数组的单个维度的数据

时间:2015-06-07 08:26:18

标签: c arrays multidimensional-array

我想要做的是只在多维数组的一个维度上读取/存储数据,如下所示:

#include <stdio.h>

int main(void){
    int array [5] [10];
    int i;

    for (i = 0; i < 5; i++) {
        printf("Reading %d number in the first dimension.\n", i+1);
        scanf("%d", &array [i]);/*Trying to store data just on 1st dimension */
    }
    printf("\n");
    for (i = 0; i < 5; i++){
        printf("%d\n", array [i]); /*Trying to print the data read*/
    }

    return 0;
}

原来,该程序无意中输出了乱码数据:

2673556
2673576
2673656
2673566
2673756

如何正确访问该单一维度?

4 个答案:

答案 0 :(得分:3)

我认为你的意思是以下

#include <stdio.h>

#define M 3
#define N 10

int main(void){
    int array [M] [N];
    int i, j;

    i = 0;
    for ( ; i < N; i++) {
        printf("Reading %d number in the first dimension.\n", i+1);
        if ( scanf("%d", &array [0][i]) != 1 ) break;
    }
    printf("\n");
    for ( j = 0; j < i; j++){
        printf("%d\n", array[0][j]); /*Tring to print the data read*/
    }

    return 0;
}

或以下

#include <stdio.h>

#define M 3
#define N 10

int main(void){
    int array [M] [N];
    int i, j;

    i = 0;
    for ( ; i < M; i++) {
        printf("Reading %d number in the first dimension.\n", i+1);
        if ( scanf("%d", &array [i][0]) != 1 ) break;
    }
    printf("\n");
    for ( j = 0; j < i; j++){
        printf("%d\n", array[j][0]); /*Tring to print the data read*/
    }

    return 0;
}

第一个程序填充数组的第一行,而第二个程序填充数组的第一列。

答案 1 :(得分:2)

2D阵列由多个1D阵列构成。

如果它是一维数组,则访问其元素a[i]i元素),i是数组的索引。

现在看到2D数组,每个元素都被访问为a[i][j]

其中i表示行的索引(表示逐行选择1D数组),然后j表示该1D数组的索引(就像您以前在1D数组中所做的那样)。 / p>

答案 2 :(得分:2)

要访问单个数组的多维数组,您必须在代码中修复一行。您的代码中的错误是您将多维数组视为单个数组,而我们需要将其修改为单个数组

for(i=0;i<10;i++)

scanf("%d",&array[0][i]);

这里array[0][i]将生成一个固定在第0行的数组,迭代我将继续,因为10你将给出输入。

类似于固定的列,您需要array[j][0],并且最终将填充行直到5。

如果你想要同时填充两个,那么你必须应用两个循环

for(i=0;i<5;i++)    

for (j=0;j<10;j++)

scanf("%d",array[i][j]);

现在这个循环首先进入第0行,并在输入时填充列,直到第10行,依此类推。

答案 3 :(得分:1)

array[dimension][item]是访问单行维度上的项目的方法。您需要两个循环:一个用于遍历行维度,另一个用于每个行维度的项目(列维度)。

假设您填写了10个项目中的所有5行:

for (dimension = 0; dimension < 5; dimension++)
    for (item = 0; item < 10; item++)
         printf("%d\n", array [dimension][item]);

但是由于你只填充了第一行,所以你不需要另一个循环。

    for (item = 0; item < 10; item++)
         printf("%d\n", array [0][item]);

要将商品放在第一行维度上,您需要将scanf("%d", &array [i]);更改为scanf("%d", &array [0][i]);

0是第一行维度的索引号,i将用作每个项目的索引。

编辑代码:

#include <stdio.h>

int main(void){
    int array [5] [10];
    int i;

    for (i = 0; i < 10; i++) {
        printf("Reading %d number in the first dimension.\n", i+1);
        scanf("%d", &array [0][i]);
    }
    printf("\n");

    int item;
    // printing the first row dimension
    for (item = 0; item < 10; item++)
         printf("%d\n", array [0][item]);


    return 0;
}