Я пытаюсь написать программу преобразования матрицы в разреженную матрицу.
Но есть проблема в моей функции scan_matrix. Я не мог понять, в чем проблема. Согласно Nemiver (отладочная программа) проблема в моем вызове fscanf ...
Мой кусок кода:
void scan_matrix(FILE *inp, struct sparse_m mysparse[], int *place_p)
{
int matrix[9][9];
int row,column,place=0;
for(column=0;column<9;column++){
for(row=0;row<9;row++){
fscanf(inp, "%d", &matrix[row][column]);
}
}
for(column=0;column<9;column++){
for(row=0;row<9;row++){
if( matrix[row][column] != 0 ) {
mysparse[place++].row = row;
mysparse[place++].column = column;
mysparse[place++].value = matrix[row][column];
}
}
}
*place_p = place;
}
и моя двумерная матрица:
64 -16 0 -16 0 0 0 0 0
-16 64 -16 0 -16 0 0 0 0
0 -16 64 0 0 -16 0 0 0
-16 0 0 64 -16 0 -16 0 0
0 -16 0 -16 64 -16 0 -16 0
0 0 -16 0 -16 64 0 0 -16
0 0 0 -16 0 0 64 -16 0
0 0 0 0 -16 0 -16 64 -16
0 0 0 0 0 -16 0 -16 64
Вывод должен быть примерно таким;
(3, 0) 64
(4, 1) -16
(5, 2) -16
(6, 3) -16
(7, 4) 64
(8, 5) -16
(7, 6) -16
(8, 7) -16
(8, 8) 64
мой полный код;
#include <stdio.h>
struct sparse_m {
int row,
column,
value;
};
void write_sparse(FILE *outp, struct sparse_m mysparse[], int c);
void scan_matrix(FILE *inp, struct sparse_m mysparse[],int *place_p);
int main(void)
{
int a = 0;
FILE *inp_txt;
FILE *outp_txt;
inp_txt = fopen("s_matrix.dat", "r");
outp_txt = fopen("sparse.dat", "w");
struct sparse_m mys[10];
scan_matrix(inp_txt, mys,&a);
write_sparse(outp_txt,mys,a);
return(0);
}
void scan_matrix(FILE *inp, struct sparse_m mysparse[], int *place_p)
{
int matrix[9][9];
int row,column,place=0;
for(column=0;column<9;column++){
for(row=0;row<9;row++){
fscanf(inp, "%d", &matrix[row][column]);
}
}
for(column=0;column<9;column++){
for(row=0;row<9;row++){
if( matrix[row][column] != 0 ) {
mysparse[place++].row = row;
mysparse[place++].column = column;
mysparse[place++].value = matrix[row][column];
}
}
}
*place_p = place;
}
void write_sparse(FILE *outp, struct sparse_m mysparse[], int c)
{
int i;
printf("%d---", c);
for(i=0;i<c;i++){
fprintf(outp, "(%d, %d) %d\n", mysparse[i].row,
mysparse[i].column,
mysparse[i].value);
}
}