c - 为什么当我在 C 中打印二维数组时,它会重复结果?
问题描述
这是我写的代码:
#include <stdio.h>
void ReadData_and_Print(int r, int c, double pin[r][c]);
int main(){
int p[0][0];
ReadData_and_Print(0,0,p[0][0]);
}
void ReadData_and_Print(int r, int c, double pin[r][c])
{
int i=0,j=0;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("give number:");
scanf("%d",&pin[i][j]);
}
}
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("%d ",pin[i][j]);
}
}
输出:
give rows2
give columns3
give number1
give number2
give number3
give number4
give number5
give number6
3 4 5 6 3 4 5 6
当我给出 1 2 3 4 5 6 时,结果是 3 4 5 6 3 4 5 6。我应该期待 1 2 3 4 5 6。我知道这是一个非常简单的问题,但它困扰着我。我不排除缺乏我对数组和 for 的了解。我做了研究,但找不到解决方案。提前致谢。
解决方案
您创建了一个维度为 0 的数组。这违反了数组声明中的约束,因此会调用未定义的行为。
您无需在中定义数组main
或将其传递给ReadData_and_Print
. 只需将r
and声明c
为 local to ReadData_and_Print
,读取它们的值,然后用这些值作为大小声明数组。
int r, c;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
int pin[r][c];
...