Почему 2d массив повторяет результаты, когда я печатаю его в C? - PullRequest
0 голосов
/ 20 июня 2020

Здесь код, который я написал:

#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. Я провел исследование, но не могу найти решения. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Вы создали массив с размером 0. Это нарушение ограничения в объявлении массива и поэтому вызывает неопределенное поведение .

Вы не делаете Нет необходимости определять массив в main или передавать его в ReadData_and_Print. Просто объявите r и c как локальные для ReadData_and_Print, прочтите их значения, а затем объявите массив после этого с этими значениями в качестве размера.

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

    int pin[r][c];
    ...
1 голос
/ 20 июня 2020

Добро пожаловать в мир 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...