第3个回答 2011-05-04
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
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;
}
//---------------------------------------------------------------------------
另外,站长团上有产品团购,便宜有保证