我正在做一些数组练习,我对这个主题感到困惑,它只打印输出的一个数字,但不是用户的不同数字的混合,我到底是什么做错了?
#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;
}
答案 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]);
由于a
和b
在循环内没有改变。
答案 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
元素分配空间,使用0
到count-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循环执行相同操作。希望这可以帮助你