c语言 如何把一个文件的每一行读入到一个二维数组中, 如何用C语言将一个txt文件放到一个二维数组中?

C\u8bed\u8a00 \u4e2d\u600e\u4e48\u5c06\u6587\u4ef6\u4e2d\u7684\u6570\u636e\u8bfb\u53d6\u5230\u4e8c\u7ef4\u6570\u7ec4\u4e2d

1\u3001\u4f7f\u7528\u53cc\u5c42\u5faa\u73af\u8bed\u53e5\uff0c\u5c31\u53ef\u4ee5\u4f9d\u6b21\u628a\u6570\u636e\u987a\u5e8f\u8bfb\u5165\u5230\u4e00\u4e2a\u4e8c\u7ef4\u6570\u7ec4\u5f53\u4e2d\u4e86\u3002
2\u3001\u4f8b\u7a0b\uff1a
#include #include #define MAXLINE 3#define MAXCOLUMN 10void main(void){ FILE *fp; //\u6587\u4ef6\u6307\u9488 char arr[MAXLINE][MAXCOLUMN]={0}; //\u5b9a\u4e493\u884c10\u5217\u7684\u4e8c\u7ef4\u6570\u7ec4\u5e76\u521d\u59cb\u5316 int i = -1; if((fp=fopen("./test/filename.txt","r"))==NULL){ //\u6253\u5f00txt\u6587\u4ef6 perror("File open error!\n"); return; } while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //\u8bfb\u53d6\u4e00\u884c\u5e76\u5b58\u5230arr\u6570\u7ec4 printf("%d: ",i); //\u6253\u5370\u884c\u53f7 //puts(arr[i]); char *subarr = strtok(arr[i]," "); //\u4ee5\u7a7a\u683c\u4e3a\u5206\u9694\u7b26\u4ecearr[i]\u4e2d\u83b7\u5f97\u5b57\u4e32 while(subarr!=NULL){ data[i][j] = atoi(subarr); //\u5c06\u5b57\u4e32\u8f6c\u4e3aint\u578b\u6570\u636e\u5b58\u5165data\u6570\u7ec4 printf("%d\t",data[i][j]); //\u6253\u5370data[i][j subarr = strtok(NULL," "); //\u7ee7\u7eed\u83b7\u5f97arr[i]\u4e2d\u7684\u5b57\u4e32 j++; //data\u6570\u7ec4\u5217\u52a0\u4e00 } printf("\n"); } //\u5faa\u73af\u5b8c\u6bd5\u540e\uff0c\u6240\u6709\u6570\u636e\u5df2\u5728data\u6570\u7ec4\u4e2d printf("\n"); fclose(fp); //\u5173\u95ed\u6307\u9488}

fopen\u51fd\u6570\u6253\u5f00\u9700\u8981\u8bfb\u53d6\u7684\u6587\u672c\uff0c\u83b7\u53d6\u8be5\u6587\u4ef6\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26
\u4f7f\u7528fscan\uff08\uff09\u51fd\u6570\u5bf9\u6587\u4ef6\u8fdb\u884c\u8bfb\u53d6\u3002
\u653e\u5230\u4e8c\u7ef4\u6570\u7ec4\u5176\u5b9e\u5c31\u662f\u8bfb\u53d6\u76f8\u5e94\u683c\u5f0f\u7684\u6570\u636e\uff0c\u7136\u540e\u5bf9\u5e94\u4e8c\u7ef4\u6570\u7ec4\u7684\u6bcf\u4e2a\u4f4d\u7f6e
\u4f8b\u5982
#include "stdio.h"#define M 300#define N 50void main(){ int i,j; float a[M][N]={0}; FILE *fp; if((fp=fopen("test.txt","rt"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<M;i++) { for(j=0;j<N;j++) fscanf(fp,"%f",&a[i][j]); fscanf(fp,"\n");} fclose(fp); for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%g ",a[i][j]); printf("\n");}}

  1. fopen函数可以读取文件

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

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

例子

#include <stdio.h>
#include <string.h>
#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!
");
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",data[i][j]);  //打印data[i][j
subarr = strtok(NULL," ");  //继续获得arr[i]中的字串
j++;  //data数组列加一
}
printf("
");
}
//循环完毕后,所有数据已在data数组中
printf("
");
fclose(fp);  //关闭指针
}


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

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

#include<stdio.h>int 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<n;i++)
{
printf("%s",a[i]);
}}
把read的第一个参数改成你的文件名。

扩展阅读:扫一扫题目出答案 ... c语言读取文件每一行 ... c语言必背100代码 ... c 入门教程 ... c++新手代码大全 ... c语言基础知识必背 ... c语言零基础入门到精通 ... c++编程必背50个代码 ... c#教程 自学 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网