读取文件的问题

时间:2010-11-21 15:16:11

标签: c

如何在C?

中读取使用FILE * fp保存的矩阵
int main()
{
    int i,j;
    FILE *fp;
    int **mat; //matriz de cartas apartir do arquivo
    int n; //numero de jogadores
    mat=(char**)malloc(3*sizeof(char*));
    for(i=0;i<2;i++){
        mat[i]=(char*)malloc(3*sizeof(char));
        if(!mat){
            printf("erro de alocacao\n");
            exit(1);
        }
    }

    fp=fopen("arquivo","r"); //this is the file to read
    if(fp==NULL){
        printf("erro de abertura de ficheiro\n");
        exit(1);

    }
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            fscanf(fp,"%d",&mat[i][j]);
        }
        printf("%d\n",mat[i][j]); //problem here 
    }
    return 0;
}

这是我想要阅读的矩阵:

1 2 9
3 6 7
4 9 5

2 个答案:

答案 0 :(得分:2)

考虑

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
        fscanf(fp,"%d",&mat[i][j]); 
} 
printf("%d\n",mat[i][j]); //problem here  

感:

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
        fscanf(fp,"%d",&mat[i][j]); 
        printf("%d ",mat[i][j]);
    }     
    printf("\n");
} 

您发布的内容在数组范围之外打印

答案 1 :(得分:1)

您正在尝试将整数读入分配给字符的空间 - 当您需要使用malloc()时,sizeof(char *)操作符合sizeof(char)int。这会引起问题。

您应该查看与您的扫描相关的打印位置;此时,您尝试仅打印每行数据中的最后一个数字,但您需要考虑j在出现打印时的值。

您可能还应该从scanf()检查返回状态,以确保数据有效。你可能也应该关闭输入文件;虽然该程序目前立即退出,但“释放您获得的资源”是一个很好的学科。同样的注释也可以应用于动态分配的数组(释放你分配的内容)。