使用用户输入在C中开发二维数组?

时间:2014-06-11 06:25:06

标签: c

我正在做一些数组练习,我对这个主题感到困惑,它只打印输出的一个数字,但不是用户的不同数字的混合,我到底是什么做错了?

#include <stdio.h> 
int main ()
{ 
    int a; 
    int b;
    int i; 
    int j; 

    printf(" Please enter a value for the first array"); 
    scanf(" %d", &a); 

    printf(" Please enter a value for the second array");  
    scanf(" %d", &b);

    double array[a][b]; 

    for( i = 0; i< a; i++) 
    { 

        for( j=0; j< b; j++)
        { 
            printf(" enter values or the arrays\n"); 
            scanf(" %lg", &array[a][b]); 
        } 

    }  

    for( i = 0; i< a; i++) 
    { 

        for( j=0; j< b; j++)
        { 
            printf("%lg", array[a][b]); 
        } 

       printf("\n"); 
    }   
    return 0; 
}  

5 个答案:

答案 0 :(得分:1)

更改为

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

而不是

scanf(" %lg", &array[a][b]);

同样适用于pritntf。它应该

printf("%lg", array[i][j]); 

答案 1 :(得分:0)

更改

scanf(" %lg", &array[a][b]);

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

改变,

printf("%lg", array[a][b]);

printf("%lg", array[i][j]);

由于ab在循环内没有改变。

答案 2 :(得分:0)

这里a和b是2d数组中的行数/列数。 array[0][0]表示第一行第一列单元格,array[0][1]表示第一行第二列单元格,依此类推,因此array[a][b]表示第+ 1行第b + 1列单元格。在循环中,您不断更改i和j的值,但a和b始终相同。然而,每次你进入或打印出array[a][b]。因此,您一遍又一遍地覆盖和读取相同的元素。而是使用您在循环中更改的变量,即i和j

而不是:

scanf(" %lg", &array[a][b]);
printf(" %lg", array[a][b]);

使用:

scanf(" %lg", &array[i][j]);
printf(" %lg", array[i][j]);

答案 3 :(得分:0)

数组下标在声明中的含义与其他代码中的含义不同。在声明中,括号内的整数告诉编译器要分配多少内存;在其他代码中,它告诉编译器要取消引用该数组的哪个元素。

因此,您需要在scanf()调用中使用正在运行的索引,因此请替换

scanf(" %lg", &array[a][b]);

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

请注意像

这样的代码
int foo[count];
foo[count] = 7;

始终是错误,因为您要为count元素分配空间,使用0count-1的索引访问这些元素。访问foo[count]只是在分配后面操作内存,可能会破坏内存中该位置的重要数据。出现这样的错误后,可能会发生任何事情。

答案 4 :(得分:0)

它打印相同的值,因为你的for循环错误:

for( i = 0; i< a; i++) {
    for( j=0; j< b; j++){ 
         printf(" enter values or the arrays\n"); 
         scanf(" %lg", &array[a][b]);
    }
}

在每个循环中,您将值保存在相同的数组位置。只需将&amp; Array [a] [b]更改为&amp; Array [i] [j],如下所示:

for( i = 0; i< a; i++) { 
    for( j=0; j< b; j++) { 
        printf(" enter values or the arrays\n"); 
        scanf(" %lg", &array[i][j]); 
    } 
 } 

对所有for循环执行相同操作。希望这可以帮助你