1

我有以下问题:我有一个文件,假设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

对我来说,困难是要让计算机清楚地知道file1.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 个列)的 file1.dat,但它给了我一个分段错误错误有什么帮助吗?

4

2 回答 2

1
#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);
}
于 2012-12-17T23:53:34.040 回答
1

可以这么简单:

// 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, %d\n", i, j );
             continue;
        }
        m[i-1][j-1] = 1;
    }
    fclose(fp);
}
于 2012-12-17T23:42:00.100 回答