【问题标题】:Why 2d array repeats the results when i print it in C?为什么当我在 C 中打印二维数组时,它会重复结果?
【发布时间】:2020-10-10 08:36:32
【问题描述】:

这里是我写的代码:

#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 的知识。我做了研究,但我找不到解决方案。 提前致谢。

【问题讨论】:

  • int p[0][0]; ... 你预计会发生什么

标签: c arrays 2d


【解决方案1】:

欢迎来到 C 世界!

请允许我先给出答案:

#include <stdio.h>
#include <stdlib.h>

void ReadData_and_Print(int r, int c, int ** pin){
    int i = 0 ,j = 0;

    // Get rows and columns
    printf("give rows:");
    scanf("%d",&r);
    printf("give columns");
    scanf("%d",&c);

    // Initialize the pin array
    pin = (int **) malloc(sizeof(int*) * r);
    for (i=0; i<r; i++){
        pin[i] = (int *)malloc(sizeof(int) * c);
    }

    // Scan all the number and store them
    for (i=0; i<r; i++){
        for (j=0; j<c; j++){
            printf("give number:");
            scanf("%d",&pin[i][j]);
        }
    }


    // Print them all
    for (i=0;i<r;i++){
        for (j=0;j<c;j++){
            printf("%d ",pin[i][j]);
        }
    }
}

int main(){
    int ** p = NULL;
    ReadData_and_Print(0, 0, p);
}

【讨论】:

    【解决方案2】:

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

    您无需在main 中定义数组或将其传递给ReadData_and_Print。只需将 rc 声明为 ReadData_and_Print 的局部变量,读取它们的值,然后以这些值作为大小声明数组。

        int r, c;
        printf("give rows:");
        scanf("%d",&r);
        printf("give columns");
        scanf("%d",&c);
    
        int pin[r][c];
        ...
    

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 2015-07-05
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多