我有以下问题:我有一个文件,比方说file1.dat,它包含以下数据:
1 2
3 1
2 1
1 3
3 2
我想用C编写一个程序,从这个文件中读取并在新文件中创建一个NxN矩阵,如果矩阵的第I个和第j个元素都包含在file1.dat中,则为1,否则为0。在这种情况下,我会有一个像一样的3x3矩阵
0 1 1
1 0 0
1 1 0
对我来说,困难在于让计算机清楚地知道文件1.dat中的数字是矩阵元素的坐标,它应该在其中放置1,而在其他位置放置0。
根据一位用户的建议,我尝试了以下代码:
#include <stdio.h>
#define N 131827
int main(void){
int x,y;
int matrix[N][N];
FILE *ifp = fopen("file1.dat", "r");
FILE *ofp = fopen("matrice_A_1.dat", "w");
while(fscanf(ifp, "%d %d", &x, &y) != EOF){
x--;
y--;
matrix[x][y] = 1;
}
fclose(ifp);
for(x=0; x<N; x++){
for(y=0; y<N; y++){
fprintf(ofp, "%d ", matrix[x][y]);
}
fprintf(ofp, "n");
}
fclose(ofp);
return(0);
}
但我使用了另一个131827行(和2列)的文件1.dat,但它给了我一个分段错误。有什么帮助吗?
可以这么简单:
// Define static matrix containing all zeroes.
const int ROWS = 3;
const int COLS = 3;
int m[ROWS][COLS] = {0};
然后阅读。。。
int i, j;
FILE * fp = fopen( "file1.dat", "rt" );
if( fp != NULL ) {
while( 2 == fscanf( fp, "%d%d", &i, &j ) {
if( i < 1 || i > ROWS || j < 1 || j > COLS ) {
printf( "Bad address: %d, %dn", i, j );
continue;
}
m[i-1][j-1] = 1;
}
fclose(fp);
}
#include <stdio.h>
//Create NxN matrix with input coordinates used to set element val=1; rest 0
void doStuff(int N){
int x,y;
int matrix[N][N] = {{0}};
FILE *ifp = fopen("file1.dat", "r");
FILE *ofp = fopen("out.dat", "w");
while(fscanf(ifp, "%d %d", &x, &y) != EOF){
x--;
y--;
matrix[x][y] = 1;
}
fclose(ifp);
for(x=0; x<N; x++){
for(y=0; y<N; y++){
fprintf(ofp, "%d ", matrix[x][y]);
}
fprintf(ofp, "n");
}
fclose(ofp);
}