首页 > 解决方案 > 为什么当我在 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 的了解。我做了研究,但找不到解决方案。提前致谢。

标签: carrays2d

解决方案


您创建了一个维度为 0 的数组。这违反了数组声明中的约束,因此会调用未定义的行为

您无需在中定义数组main或将其传递给ReadData_and_Print. 只需将rand声明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];
    ...

推荐阅读