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