c语言 如何把一个文件的每一行读入到一个二维数组中,

文件的每一行是一字符串,
2024-11-29 00:57:34
推荐回答(4个)
回答1:

  1. fopen函数可以读取文件

  2. 读到的每一行保存在字符数组中,根据空格作为分隔符进行分割

  3. 再用atoi得到数字,保存在数组中,大体思路就是这样

例子

#include 
#include 
#define MAXLINE 3
#define MAXCOLUMN 10
void main(void){
FILE *fp; //文件指针
char arr[MAXLINE][MAXCOLUMN]={0};  //定义3行10列的二维数组并初始化
int i = -1;
if((fp=fopen("./test/filename.txt","r"))==NULL){ //打开txt文件
perror("File open error!\n");
return;
}
while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets
printf("%d: ",i); //打印行号
//puts(arr[i]);
char *subarr = strtok(arr[i]," ");  //以空格为分隔符从arr[i]中获得字串,百度strtok

while(subarr!=NULL){
data[i][j] = atoi(subarr);  //将字串转为int型数据存入data数组
printf("%d\t",data[i][j]);  //打印data[i][j
subarr = strtok(NULL," ");  //继续获得arr[i]中的字串
j++;  //data数组列加一
}
printf("\n");
}
//循环完毕后,所有数据已在data数组中
printf("\n");
fclose(fp);  //关闭指针
}

回答2:

用fgets()会自动读一行,而你的缓存区恰好是数组,所以保存起来很简单。至于文件操作和fgets()具体操作,如果有不懂,建议楼主查阅相关资料

回答3:

如果是数组a[][]for(count=0;;count++)
{ if(gets(a[count])==NULL)//这样就可以了 把你的每一行已经读入了 并且当最后文件的结尾时就break了 break; /*你改写的代码*/}

回答4:

#includeint read(char *fn,char a[][100],int maxLine)
{
FILE *f=fopen(fn,"r");
int i=0;
if(f)
{
while(!feof(f))
{
fgets(a[i],100,f);
if(++i>=maxLine)
{
break;
}
}
}
fclose(f);
return i;
}
char a[500][100];
void main()
{
int i=0;
int n=read("c:\\service.log",a,500);
for(i=0;i {
printf("%s",a[i]);
}}
把read的第一个参数改成你的文件名。