Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用用户输入在C语言中开发二维阵列?_C - Fatal编程技术网

使用用户输入在C语言中开发二维阵列?

使用用户输入在C语言中开发二维阵列?,c,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

我正在练习数组,我对这个问题有点困惑,它只打印输入的一个数字,而不是用户输入的不同数字的混合,我到底做错了什么

#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; 
}  
#包括
int main()
{ 
INTA;
int b;
int i;
int j;
printf(“请为第一个数组输入一个值”);
scanf(“%d”和“&a”);
printf(“请为第二个数组输入一个值”);
scanf(“%d”和“b”);
双数组[a][b];
对于(i=0;i
更改为

scanf(“%lg”和数组[i][j])

反而

scanf(“%lg”和数组[a][b])

同样适用于
pritntf
。它应该

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

和变化

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


因为
a
b
在循环内没有改变。

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

而不是:

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


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

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

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


注意,代码如下

int foo[count];
foo[count] = 7;

始终是一个错误,因为您正在为
count
元素分配空间,这些元素使用从
0
count-1
的索引进行访问。访问
foo[count]
会在分配之后操纵内存,可能会在内存中的该位置上重击重要数据。出现这种错误后,可能会发生任何情况。

它会打印相同的值,因为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]);
    }
}
(i=0;i{ 对于(j=0;j
在每个循环中,将值保存在相同的数组位置。只需将&Array[a][b]更改为&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]); 
    } 
 } 
(i=0;i 对于(j=0;j

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

我想知道为什么人们看到了答案,却仍然想回答正确的答案same@nightshade查看回复发布时间并检查谁提前发布。我知道。。。这就是为什么我没有在别人的评论。。。我知道你先写了,5分钟后又有人来写同样的东西@杰耶什
scanf(" %lg", &array[a][b]);
scanf(" %lg", &array[i][j]);
int foo[count];
foo[count] = 7;
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(" enter values or the arrays\n"); 
        scanf(" %lg", &array[i][j]); 
    } 
 }