我是C编程的初学者,我需要一些帮助,为我的C编程类编写代码 。 提示是: 该程序的输入是位于名为textfile94的文件中的浮点数据的二维数组。输入数组将包含3行数据 包含5列数据的行。
该程序需要提前知道2D阵列的硬编码高度和宽度(实际上是3x5)。我希望您创建一个全局常量变量来保存这些维度,并在代码中使用这些维度,而不是在代码中写入字面数字。
这是我到目前为止(我不确定它是否正确):
#include <stdio.h>
#include <stdlib.h>
#define int rows = 3;
#define int columns = 5;
float array[rows][columns];
int main(int argc, char* argv[]){
FILE* fin;
float x;
int i,j;
int* array;
fin = fopen("textfile94", "r");
fscanf("%f", &x);
array = (int*) malloc(rows*sizeof(int*));
for(i=0;i<rows;i++){
for(j=0;j<columns;j++)
array[i]=(int*) malloc(columns* sizeof(int));
}
}
printf("The Average values for the three rows are:%f",array[rows]);
printf("The Average values for the five columns are:%f", array[columns]);
return 0;
}
答案 0 :(得分:1)
由于您已经知道了数组的尺寸(3x5),因此无需使用malloc()
动态分配它。
你拥有的是正确的(但你应该把它变成本地而不是全局):
float array[3][5];
这已经分配了足够的内存来容纳所有数组元素。
您的要求也是:
我希望您创建一个全局常量变量来保存这些维度,并在代码中使用它们。
这意味着您需要声明常量来指示数组元素,例如:
const int rows = 3;
const int columns = 5;
float array[rows][columns];
修改强>
从你的评论中,我相信你正在使用c89(或早期版本)。在c99可变长度数组(在谷歌上查找VLA
,如果你不知道这一点)是允许的,这意味着上面会编译但是在c98中不允许使用VLA。 C89和更早版本需要对数组维使用编译时常量表达式。因此,您需要使用编译时常量表达式(其中const限定变量不在C中)。所以你需要使用:
#define ROWS 3
#define COLUMNS 5
float array[ROWS][COLUMNS];