如何读取四分体(四个整数组)并将其保存在二维数组中?
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
这是读取多个四分体的简单程序:
- 它首先要求输入四分体的数量
- 它分配一个动态数组
tt
,它在四分体数组的数组中
- 它在
tt
中分配每个数组四分体
- 它用上面相同的函数读取每个四分体数组
- 它使用公式访问数组项地址 [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
这是我写的函数:
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
这是读取多个四分体的简单程序:
- 它首先要求输入四分体的数量
- 它分配一个动态数组
tt
,它在四分体数组的数组中 - 它在
tt
中分配每个数组四分体
- 它用上面相同的函数读取每个四分体数组
- 它使用公式访问数组项地址 [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