二维数组 malloc - 只显示最后的项目
2D Array malloc - only last Items are shown
我想分配一个二维数组并将文件中的数据放入其中。
但它只显示我文件的最后一项。
我必须做什么?
文件中有 600.000 个数字,例如“280.000”。
double read_data(char *filename)
{
FILE *myFile = open_file(filename, "r");
int anzahl_zeilen = 0;
char zeile[80];
while (!feof(myFile))
{
fgets(zeile, 80, myFile);
anzahl_zeilen++;
}
rewind(myFile);
int i;
int **myArray = (int**)malloc(anzahl_zeilen*sizeof(int*));
for (i = 0; i < anzahl_zeilen; i++)
{
myArray[i] = (int*)malloc(4*sizeof(double));
}
for (i = 0; i < anzahl_zeilen; i++)
{
fscanf(myFile, "%lf %lf %lf %lf", &myArray[i,0], &myArray[i,1], &myArray[i,2], &myArray[i,3]);
}
printf("%lf %lf %lf %lf\n", myArray[0,0], myArray[0,1], myArray[0,2], myArray[0,3]);
printf("%lf %lf %lf %lf\n", myArray[1,0], myArray[1,1], myArray[1,2], myArray[1,3]);
printf("%lf %lf %lf %lf\n", myArray[2,0], myArray[2,1], myArray[2,2], myArray[2,3]);
printf("%lf %lf %lf %lf\n", myArray[3,0], myArray[3,1], myArray[3,2], myArray[3,3]);
return;
}
这个while循环
while (!feof(myFile))
{
fgets(zeile, 80, myFile);
anzahl_zeilen++;
}
应该改写成
while ( fgets(zeile, 80, myFile))
{
anzahl_zeilen++;
}
还有这样的表达
&myArray[i,0]
相当于
&myArray[0]
因为在方括号内使用了带逗号运算符的表达式。看来你的意思是
&myArray[i][0]
该函数也有 return 类型 double
但 return 什么都没有。
如果您尝试分配 double
类型的元素数组,那么在这种情况下您需要编写
double **myArray = (double**)malloc(anzahl_zeilen*sizeof(double*));
for (i = 0; i < anzahl_zeilen; i++)
{
myArray[i] = (double*)malloc(4*sizeof(double));
}
并且该函数必须具有 return 类型 double **
和 return 指针 myArray
。
我想分配一个二维数组并将文件中的数据放入其中。 但它只显示我文件的最后一项。 我必须做什么?
文件中有 600.000 个数字,例如“280.000”。
double read_data(char *filename)
{
FILE *myFile = open_file(filename, "r");
int anzahl_zeilen = 0;
char zeile[80];
while (!feof(myFile))
{
fgets(zeile, 80, myFile);
anzahl_zeilen++;
}
rewind(myFile);
int i;
int **myArray = (int**)malloc(anzahl_zeilen*sizeof(int*));
for (i = 0; i < anzahl_zeilen; i++)
{
myArray[i] = (int*)malloc(4*sizeof(double));
}
for (i = 0; i < anzahl_zeilen; i++)
{
fscanf(myFile, "%lf %lf %lf %lf", &myArray[i,0], &myArray[i,1], &myArray[i,2], &myArray[i,3]);
}
printf("%lf %lf %lf %lf\n", myArray[0,0], myArray[0,1], myArray[0,2], myArray[0,3]);
printf("%lf %lf %lf %lf\n", myArray[1,0], myArray[1,1], myArray[1,2], myArray[1,3]);
printf("%lf %lf %lf %lf\n", myArray[2,0], myArray[2,1], myArray[2,2], myArray[2,3]);
printf("%lf %lf %lf %lf\n", myArray[3,0], myArray[3,1], myArray[3,2], myArray[3,3]);
return;
}
这个while循环
while (!feof(myFile))
{
fgets(zeile, 80, myFile);
anzahl_zeilen++;
}
应该改写成
while ( fgets(zeile, 80, myFile))
{
anzahl_zeilen++;
}
还有这样的表达
&myArray[i,0]
相当于
&myArray[0]
因为在方括号内使用了带逗号运算符的表达式。看来你的意思是
&myArray[i][0]
该函数也有 return 类型 double
但 return 什么都没有。
如果您尝试分配 double
类型的元素数组,那么在这种情况下您需要编写
double **myArray = (double**)malloc(anzahl_zeilen*sizeof(double*));
for (i = 0; i < anzahl_zeilen; i++)
{
myArray[i] = (double*)malloc(4*sizeof(double));
}
并且该函数必须具有 return 类型 double **
和 return 指针 myArray
。