Как читать тетрады (группы из четырех целых чисел) и сохранять их в 2-м массиве? - PullRequest
1 голос
/ 18 июня 2020

Это функция, которую я написал:

int read_data(int (*p)[0][0])
{
    int i,j;
    for (i=0;i<N;i++)
    {
        for (j=0;j<1;j++)
        {
            printf("give first number:");
            scanf("%d",&(*p)[i][j]);
            printf("give second number:");
            scanf("%d",&(*p)[i][j]);
            printf("give third number:");
            scanf("%d",&(*p)[i][j]);
            printf("give forth number:");
            scanf("%d",&(*p)[i][j]);
        }
    }

    for (i=0;i<N;i++)
    {
        for (j=0;j<4;j++)
        {
            printf("%d [%d],[%d]\n",(*p)[i][j],i,j);
            printf("%d [%d],[%d]\n",(*p)[i][j],i,j);
            printf("%d [%d],[%d]\n",(*p)[i][j],i,j);
            printf("%d [%d],[%d]\n",(*p)[i][j],i,j);
        }
    }
}

Мне нужно решить упражнение. Одна часть проблемы состоит в том, чтобы прочитать тетрады целых чисел (группы из четырех целых чисел) и сохранить их в массиве. Я пробовал много разных подходов, но, похоже, ни один из них не работает.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 июня 2020

Вот очень простое решение.

Числа назначаются непосредственно в двухмерном массиве в одном scanf (вы можете использовать индексы, но в этом нет необходимости, потому что вы знаете, что у вас может быть только 4 числа) .

Функция scanf_tetrad принимает массив как параметр.

Код:

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

void scanf_tetrad(int p[2][2])
{
        printf("Enter 4 numbers:");
        scanf("%d %d %d %d", &p[0][0], &p[0][1], &p[1][0], &p[1][1]);
}

int main()
{
        int ia[2][2];
        int i,j;

        scanf_tetrad(ia);

        printf("You entered: ");
        for (i=0; i < 2; i++)
                for(j=0; j < 2; j++)
                        printf("%d ", ia[i][j]);

        printf("\n");

        return 0;
}

Выполнение:

./tetrad
Enter 4 numbers:54634 456 7486743 4546
You entered: 54634 456 7486743 4546 

Вот простая программа для чтения нескольких тетрад:

  1. он сначала просит ввести количество тетрад
  2. он выделяет динамический c массив tt который в массиве тетрадных массивов
  3. он выделяет каждую тетраду массива в tt
  4. он читает каждый тетрадный массив с той же функцией выше
  5. он отображает элементы массива тетрад, используя формулу для доступа к адресу элемента массива [x, y], что составляет x * (number of columns) + y. Обратите внимание, что этот код может не соответствовать стандарту на 100% C.

метрад. c

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

void scanf_tetrad(int p[2][2])
{
        printf("Enter 4 numbers:");
        scanf("%d %d %d %d", &p[0][0], &p[0][1], &p[1][0], &p[1][1]);
}

int main()
{
    int i,j, idx;
    int ttnb;
    int ***tt, **ctt;


    printf("Enter number of tetrad:");
    scanf("%d", &ttnb);

    tt = malloc(ttnb * sizeof (int [2][2]));
    if (tt == NULL)
    {
        perror("malloc");
        return 1;
    }

    for (idx=0; idx < ttnb; idx++)
    {
        tt[idx] = malloc(sizeof (int [2][2]));
        if (tt[idx] == NULL)
        {
            perror("malloc");
            return 1;
        }
    }


    for (idx=0; idx < ttnb; idx++)
    {
        scanf_tetrad((int (*)[2])tt[idx]);
    }

    printf("You entered:\n");
    for (idx=0; idx < ttnb; idx++)
    {
        printf("tetrad %d: ", idx);
        ctt = tt[idx];      
        for (i=0; i < 2; i++)
            for(j=0; j < 2; j++)
            {
                printf("%d ", *((int*)ctt + (i * 2) + j));
            }
        printf("\n");
    }


    return 0;   
}

Пример выполнения:

./mtetrad
Enter number of tetrad:4
Enter 4 numbers: 1 2 3 4
Enter 4 numbers:5 6 7 8 
Enter 4 numbers:9 10 11 12     
Enter 4 numbers:13 14 15 16
You entered:
tetrad 0: 1 2 3 4 
tetrad 1: 5 6 7 8 
tetrad 2: 9 10 11 12 
tetrad 3: 13 14 15 16 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...