我有这个我无法解决的功课问题。我必须创建一个多维数组(大小未知),填充它,然后将其复制到一个新的数组。这就是我想出来的。
#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;
}
我对这段代码有两个问题。
输入问题。当我输入要添加到数组中的第一个值时,它不会读取/存储它。它在以下循环中读取/存储先前的变量。这意味着对于2x2阵列,我必须输入5个数字,而第5个数字是无用的(忽略它)。
副本不起作用。它给出的值与我输入的值不同。我有一种感觉,它传递数组及其大小,但不是它的内容(所以它是空的,因此是垃圾输出)。
任何人都可以指导我朝正确的方向发展。
感谢。
答案 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)
问题解决了!额外的空间和错误的变量!感谢所有的海报。一如既往的快速高效:)