请问谁知道如何用C语言读取一个未知长度的矩阵并存入二维数组??
比如说矩阵:
47345234262
75456345345
62234324325
32542352362
这只是个比如,因为实际上我们并不知道矩阵的行,列数,如何通过写C语言程序,让程序在读取的时候知道什么时候应该换行,并进行 行,列数的统计??
文件中的数字不分隔,把它们全当成0-9的数字,中间没有空格,没有标点,
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答 2019-10-03
可以先定义个长度不定的数组,然后从测试文件中读取,并判断是否到达文件为(EOF),没读完一行移到下一行读取,具体函数C语言标准库里面都有