我想使用函數從文本文檔動態地構造C中的矩陣。 我使用calloc製作矩陣時遇到了問題,可能在給矩陣元素賦值時,我找不到任何東西。我可以處理一個矢量。我有問題,使用calloc來處理矩陣的功能
代碼在這裏:
#include <stdio.h>
#include <stdlib.h>
void beolvas_ellista(int *, int *, int *, int *, int ***, char *);
int main()
{
int ir, suly, csom, el, i, **ellista;
//The following commented code works
/*FILE * f;
f=fopen("be.txt","r");
fscanf(f,"%d",&ir);
fscanf(f,"%d",&suly);
fscanf(f,"%d",&csom);
fscanf(f,"%d",&el);
ellista=(int **)calloc(2,sizeof(int *));
for(i=0;i<el;++i)
{
ellista[i]=(int *)calloc(el,sizeof(int));
}
i=0;
while(!feof(f))
{
fscanf(f,"%d",&ellista[0][i]);
fscanf(f,"%d",&ellista[1][i]);
++i;
}
for(i=0;i<el;++i)
printf("%d %d\n",ellista[0][i],ellista[1][i]);
fclose(f);*/
beolvas_ellista(&ir, &suly, &csom, &el, &ellista, "be.txt");
for(i=0;i<el;++i)
printf("%d %d\n",ellista[0][i],ellista[1][i]);
return 0;
}
void beolvas_ellista(int *ir, int *suly, int *csom, int *el, int ***ellista, char *allomany)
{
int i;
FILE * f;
f=fopen(allomany,"r");
fscanf(f,"%d",ir);
fscanf(f,"%d",suly);
fscanf(f,"%d",csom);
fscanf(f,"%d",el);
*ellista=(int **)calloc(2,sizeof(int *));
for(i=0;i<*el;++i)
{
*ellista[i]=(int *)calloc(*el,sizeof(int));
}
i=0;
while(!feof(f))
{
fscanf(f,"%d",ellista[0][i]);
fscanf(f,"%d",ellista[1][i]);
++i;
}
fclose(f);
}
這裏是文本文件:
be.txt
0 0
7 8
1 2
1 3
2 3
3 4
4 5
4 6
5 7
6 7
而且,這裏是我用來收集信息的代碼:
void beolvas(int*pn, int**pa, char*allomany)
{
int i;FILE*f;
f=fopen(allomany,"r");
fscanf(f,"%d",pn);
*pa=(int*)malloc((*pn)*sizeof(int));
for(i=0; i<*pn; i++)
fscanf(f,"%d",(*pa)+i);
fclose(f);
}
main()
{
int n, *a;
beolvas(&n, &a, "be.txt");
...
}
'INT ***'是的,你正在做的事情非常,非常* *錯誤的符號。 – 2013-10-28 20:00:18
@ H2CO3如果還有更好的方法可以,請給我舉個例子,我只知道這種類型的透射二維矩陣是一個點。 – Miklosflame
我建議你使用一個真正的二維數組(或至少一個指向其第一個元素的指針):int(* arr)[COLS] = malloc格式化您的代碼(使用縮進,空格)並使用英文函數和變量名稱,以便代碼更易於閱讀。 – 2013-10-29 05:16:06