char *getline(FILE *fp) /*从文件读取一行内容,以字符形式保存*/ { char c,*cl=NULL; int n=0; while ((c=fgetc(fp))!='\n'&&c!=EOF) { cl=cl?realloc(cl,sizeof(char)*(n+++1)):malloc(sizeof(char)*++n); cl[n-1]=c; } if (cl) { cl=realloc(cl,sizeof(char)*++n); cl[n-1]=0; }
return cl; }
int *split(char *line) /*从字符数组line中提取出整数,保存到整型数组中并返回*/ { int *rt=malloc(sizeof(int)); int i,l,num; rt[0]=0; for (i = 0; *line; i++) { rt=realloc(rt,sizeof(int)*(++rt[0]+1)); sscanf(line,"%1d",&num); rt[rt[0]]=num; line+=(int)floor(log10(num))+1; while (isspace(*line)) ++line; } return rt; }
int main(void) { FILE *fp=fopen("c:\\d.txt","r"); char *cl=NULL; int **ma=NULL; /*二维数组指针,指向从文件读取的矩阵*/ int i,j,n=0; /*n是矩阵的行数*/ while ((cl=getline(fp))!=NULL)/*这个过程用于从文件读取矩阵并保存到动态分配的二维数组中*/ { ma=ma?realloc(ma,sizeof(int *)*(n+++1)):malloc(sizeof(int *)*++n); ma[n-1]=split(cl);
} fclose(fp);
for (i = 0; i<n; i++) { /*输出矩阵*/ for (j=1; j<=ma[i][0]; j++) { /*ma[i][0]保存了该行的整数个数*/ printf("%d\t",ma[i][j]); } putchar('\n'); } return 0; } //--------------------------------------------------------------------------- 另外,站长团上有产品团购,便宜有保证