如何读取四分体(四个整数组)并将其保存在二维数组中?

How to read tetrads (groups of four integers) and save it in 2d array?

这是我写的函数:

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);
        }
    }
}

我必须解决一个练习。问题的一部分是读取整数的四分体(四个整数的组)并将其保存在数组中。我尝试了许多不同的方法,但 none 似乎有效。

提前致谢。

这是一个非常简单的解决方案。

在单个 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. 它分配一个动态数组tt,它在四分体数组的数组中
  3. 它在tt
  4. 中分配每个数组四分体
  5. 它用上面相同的函数读取每个四分体数组
  6. 它使用公式访问数组项地址 [x,y] 即 x * (number of columns) + y 来显示四分体数组项。请注意,此代码可能并非 100% C 标准兼容。

metrad.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