gpt4 book ai didi

c - 动态分配 - 用户在运行前不知道数组大小的情况下输入元素

转载 作者:行者123 更新时间:2023-11-30 15:07:34 25 4
gpt4 key购买 nike

所以在运行时我们不知道数组(矩阵)的大小,我希望用户输入数组(矩阵)的元素。这是正确的方法吗?我是否正确返回了指向数组的指针?

#define MAX_DIM 10
int main(void)
{
int done = 0;
int rows, cols;
float *dataMatrix;

while (!done)
{
// Prompt user to enter row and column dimensions of matrix (must be > 0)
do
{
printf("Enter row dimension (must be between 1 and %d): ", MAX_DIM);
scanf("%d", &rows);

} while(rows <= 0 || rows > MAX_DIM);
do
{
printf("Enter column dimension (must be between 1 and %d): ", MAX_DIM);
scanf("%d", &cols);
} while(cols <= 0 || cols > MAX_DIM);

dataMatrix = readMatrix(rows, cols);
if (dataMatrix == NULL)
{
printf ("Program terminated due to dynamic memory allocation failure\n");
return (0);
}


float *matrix(int numRows, int numCols)
{
int i=0;
float **m= NULL;
m=malloc(numRows*sizeof(float*));
if(m==NULL)
{
printf("error\n");
exit(1);
}
for(i=0;i<numRows;i++)
{
m[i]=malloc(numCols*sizeof(float));
}
if(m[i-1]==NULL)
{
printf("error\n");
exit(1);
}
printf("Enter values for the matrix: ");
scanf("%f",m[i]);
return m[i];
}

最佳答案

is this the proper way to do it?

您正朝着正确的方向前进,但尚未完全实现。

Also did i return the pointer to the array properly?

没有。

您可以使用两种方法之一为矩阵分配内存。

  1. 分配 numRowsfloat* 数。对于每一行,分配 numCols of floats,然后返回指向 float*s 数组的指针。这就是您尝试过的,但您并没有做对所有事情。

    仔细查看修改后的用于读取用户数据的代码和return语句。

    float **matrix(int numRows, int numCols)    
    {
    int i=0;
    float **m = malloc(numRows*sizeof(float*));
    if(m == NULL)
    {
    printf("error\n");
    exit(1);
    }

    for(i=0; i<numRows; i++)
    {
    m[i] = malloc(numCols*sizeof(float));
    if(m[i] == NULL)
    {
    printf("error\n");
    exit(1);
    }
    }

    printf("Enter values for the matrix: ");
    for (i = 0; i < numRows; ++i )
    {
    for (int j = 0; j < numCols; ++j)
    {
    scanf("%f", &m[i][j]);
    }
    }
    return m;
    }
  2. 分配 numRows*numColsfloat。将一维数组视为二维数据的持有者。使用适当的偏移量将一维数组视为二维数组。返回一个指向float数组的指针。

    float *matrix(int numRows, int numCols)    
    {
    int i=0;
    float *m = malloc(numRows*numCols*sizeof(float));
    if(m==NULL)
    {
    printf("error\n");
    exit(1);
    }
    printf("Enter values for the matrix: ");
    for (i = 0; i < numRows; ++i)
    {
    for (int j = 0; j < numCols; ++j)
    {
    int index = i*numCols+j;
    scanf("%f", &m[index]);
    }
    }
    return m;
    }

关于c - 动态分配 - 用户在运行前不知道数组大小的情况下输入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com