This program should call a function that opens an external file and browse it counting the rows of it, then it creates a pointer to a matrix and browses again the file but now saving its data on the matrix and returns that matrix, after that it will print the matrix.
这个程序应该调用一个打开外部文件的函数并浏览它计算它的行,然后它创建一个指向矩阵的指针并再次浏览文件,但现在将其数据保存在矩阵上并返回该矩阵,之后它将打印矩阵。
#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;
}
The problem here is that when the matrix should be printed the program crashes, I know the program does saves the data, since when I print it directly inside the function I does prints, so I think it might be ether the way I'm declaring the matrix or the function or the way I'm calling to the function.
这里的问题是,当打印矩阵程序崩溃时,我知道程序确实保存了数据,因为当我直接在函数内部打印时,我打印出来,所以我认为它可能是以我宣布的方式矩阵或函数或我调用函数的方式。
Edit: The content of the file it calls is just a data set separated by tabulations.
编辑:它调用的文件的内容只是由表格分隔的数据集。
0.06 36.16 23.739 2425.0 2567.4 8.3304
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 80.00 27.132 2487.3 2650.1 8.5804
0.06 120.00 30.219 2544.7 2726.0 8.7840
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 160.00 33.302 2602.7 2802.5 8.9693
0.06 200.00 36.383 2661.4 2879.7 9.1398
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 240.00 39.462 2721.0 2957.8 9.2982
0.06 280.00 42.540 2781.5 3036.8 9.4464
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 320.00 45.618 2843.0 3116.7 9.5859
0.06 360.00 48.696 2905.5 3197.7 9.7180
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.06 400.00 51.774 2969.0 3279.6 9.8435
(you can't note the tabulations but they are there)
(你不能注意表格,但他们在那里)
Any correction is welcome.
欢迎任何更正。
1 个解决方案
#1
0
fix like this
像这样解决
#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;
}
#1
0
fix like this
像这样解决
#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;
}