这个程序应该调用一个打开外部文件的函数并浏览它计算它的行,然后它创建一个指向矩阵的指针并再次浏览文件,但现在将其数据保存在矩阵上并返回该矩阵后它将打印矩阵。
#include <stdio.h>
#include <stdlib.h>
int tam;
float **carga_archivo(char *nombre_archivo);
int main()
{
int i,j;
char *nombre_archivo="Agua_Vapor.txt";
float **agua_vapor=carga_archivo(nombre_archivo);
for (i = 0; i < 6; i++)
{
for (j = 0; i < tam; i++)
printf("%f ", agua_vapor[i][j]);
printf("\n");
}
return 0;
}
float **carga_archivo(char *nombre_archivo)
{
int i=0;
float P[300][6];
FILE *archivo;
archivo=fopen(nombre_archivo,"r");
while(!feof(archivo))
{
i++;
fscanf(archivo,"%f\t%f\t%f\t%f\t%f\t%f\n",
&P[0][i],&P[1][i],&P[2][i],&P[3][i],&P[4][i],&P[5][i]);
//This part is just so the program can read the file line per line,
//else it would count character per character, doesn't really do anything
//(I didn't know the command or condition to do it other way
}
tam=i;
printf("%i",tam);
int filas = 6;
int columnas = tam;
float **M = (float **)malloc(filas*sizeof(float*));
for (i=0;i<filas;i++)
M[i] = (float*)malloc(columnas*sizeof(float));
for (i = 0; i < columnas; ++i)
fscanf(archivo,"%f\t%f\t%f\t%f\t%f\t%f\n",&M[0][i],&M[1][i],
&M[2][i],&M[3][i],&M[4][i],&M[5][i]);
fclose (archivo);
return M;
}
这里的问题是,当打印矩阵程序崩溃时,我知道程序确实保存了数据,因为当我直接在函数内部打印时我会打印,所以我认为它可能是以太的方式我我正在声明矩阵或函数或我调用函数的方式。
编辑:它调用的文件内容只是由制表符分隔的数据集。
0.06 36.16 23.739 2425.0 2567.4 8.3304
0.06 80.00 27.132 2487.3 2650.1 8.5804
0.06 120.00 30.219 2544.7 2726.0 8.7840
0.06 160.00 33.302 2602.7 2802.5 8.9693
0.06 200.00 36.383 2661.4 2879.7 9.1398
0.06 240.00 39.462 2721.0 2957.8 9.2982
0.06 280.00 42.540 2781.5 3036.8 9.4464
0.06 320.00 45.618 2843.0 3116.7 9.5859
0.06 360.00 48.696 2905.5 3197.7 9.7180
0.06 400.00 51.774 2969.0 3279.6 9.8435
(你不能注意表格,但它们在那里)
欢迎任何更正。
答案 0 :(得分:0)
像这样修复
#include <stdio.h>
#include <stdlib.h>
#define COLS 6
int tam;
float **carga_archivo(const char *nombre_archivo);
int main(void){
int i,j;
const char *nombre_archivo= "Agua_Vapor.txt";
float **agua_vapor = carga_archivo(nombre_archivo);
for (i = 0; i < tam; i++){
for (j = 0; j < COLS; j++)
printf("%f ", agua_vapor[i][j]);
printf("\n");
}
//deallocate agua_vapor
return 0;
}
float **carga_archivo(const char *nombre_archivo){
float P[300][COLS];
FILE *archivo = fopen(nombre_archivo, "r");
int i= 0;
while(i < 300 && COLS==fscanf(archivo, "%f\t%f\t%f\t%f\t%f\t%f\n", &P[i][0],&P[i][1],&P[i][2],&P[i][3],&P[i][4],&P[i][5])){
i++;
}
fclose(archivo);
tam=i;
//printf("%i",tam);
int rows = tam, columnas = COLS;
float **M = malloc(rows * sizeof(float*));
for (i = 0; i < rows; i++){
M[i] = malloc(columnas*sizeof(float));
for(int j = 0; j < columnas; ++ j)
M[i][j] = P[i][j];
}
return M;
}