在C中复制多维数组

时间:2013-12-04 08:42:44

标签: c arrays multidimensional-array copy scanf

我有这个我无法解决的功课问题。我必须创建一个多维数组(大小未知),填充它,然后将其复制到一个新的数组。这就是我想出来的。

#include <stdio.h>
void copy_arr(int x, int y, double source[x][y], double target[x][y]);

int main(void){
int x,y,i,j;

printf("Enter how many rows you want? \n");
scanf("%d" ,&x);

printf("Enter how many columns you want? \n");
scanf("%d" ,&y);

double source[x][y];
double target[x][y];

for (i = 0;i<x;i++){
    for (j = 0;j<y;j++){
        printf("Enter a number. \n");
        scanf("%lf " ,&source[x][y]);
    }
}

copy_arr(x,y,source,target);
return 0;
}

void copy_arr(int x, int y, double source[x][y], double target[x][y]){
int i,j;

for (i = 0;i<x;i++){
    for (j = 0;j<y;j++){
        target[i][j] = source[i][j];
        printf("%.3lf " ,target[i][j]);
    }
    printf("\n");
}

return;
}

我对这段代码有两个问题。

  1. 输入问题。当我输入要添加到数组中的第一个值时,它不会读取/存储它。它在以下循环中读取/存储先前的变量。这意味着对于2x2阵列,我必须输入5个数字,而第5个数字是无用的(忽略它)。

  2. 副本不起作用。它给出的值与我输入的值不同。我有一种感觉,它传递数组及其大小,但不是它的内容(所以它是空的,因此是垃圾输出)。

  3. 任何人都可以指导我朝正确的方向发展。

    感谢。

4 个答案:

答案 0 :(得分:2)

问题1:

调用scanf时索引错误。使用i,j,而不是x,y:

    scanf("%lf" ,&source[i][j]);

问题2:

通过解决1来解决。

注意:

以下是copy_arr的另一种较短的实施方式:

void copy_arr(int x, int y, double source[x][y], double target[x][y]) {
    memcpy(target, source, x*y*sizeof(double));
}

答案 1 :(得分:1)

这是一个主要问题:

scanf("%lf " ,&source[x][y]);

我认为你的意思是

scanf("%lf" ,&source[i][j]);

第一个(你在你的问题中)将总是写入同一个索引,它超出了数组的界限,因此导致了未定义的行为。

答案 2 :(得分:0)

scanf("%lf",&source[i][j]);

试试这个:

#include <stdio.h>
void copy_arr(int x, int y, double source[x][y], double target[x][y]);

int main(void){
int x,y,i,j;

printf("Enter how many rows you want? \n");
scanf("%d" ,&x);

printf("Enter how many columns you want? \n");
scanf("%d" ,&y);

double source[x][y];
double target[x][y];

for (i = 0;i<x;i++){
    for (j = 0;j<y;j++){
        printf("Enter a number. \n");
        scanf("%lf " ,&source[i][j]);
    }
}

copy_arr(x,y,source,target);
return 0;
}

void copy_arr(int x, int y, double source[x][y], double target[x][y]){
int i,j;

for (i = 0;i<x;i++){
    for (j = 0;j<y;j++){
        target[i][j] = source[i][j];
        printf("%.3lf " ,target[i][j]);
    }
    printf("\n");
}

return;
}

答案 3 :(得分:0)

问题解决了!额外的空间和错误的变量!感谢所有的海报。一如既往的快速高效:)