请教关于c语言定义数组如何从文件读取数据存入二维数组的问题

C语言中如何将文件中的某行的字符串读取出来?
C语言中如何将文件中的某行的字符串读取出来? 100
RT例如 我的文件中一行里是 ABC DEF 10 20并且每一行都是 %s %s %d %d的格式如何将他们分别读取出来进行使用呢?
#include "stdio.h"void main(){&FILE *f=fopen("c:\\a.txt","r");&char sz0[100];&char sz1[100];&int d0,d1;&if(f)&{&&while(!feof(f))&&{&&&if(4==fscanf(f,"%s%s%d%d",sz0,sz1,&d0,&d1))&&&{&&&&printf("%s %s %d %d\n",sz0,sz1,d0,d1);&&&}&&&&&}&&fclose(f);&}&else&{&&printf("fail to open file.\n");&}
呃……看到你的图片里是三行的 为什么我只能输出第一行呢?
你的文件只有1行内容。所以,只能输出1行了。
不对啊 有好几行呢
那你的好几行格式是不是不对?
你重新按下面格式建个文件,存为c:\a.txt。每组字串和数字用空格分开,前两组是字串,后两组是数字。
ABC DEF 10 20
GHI& JKL& 110 120
MNO PQR 100 200
嗯……可以了 最后一个问题 如果我想把每行的字串和数字都同时赋值到几个二维数组里 比如d0[N](N是行数) 即每行的数据都进行保存了 请问可以实现么?谢谢!
文件有效数据不超过1000行,超过请相应更改,iLine返回读到的数据行数。
#include "stdio.h"void main(){&FILE *f=fopen("c:\\a.txt","r");&char sz0[];&char sz1[];&int& d[1000][2];&int iLine=0;&int i=0;&if(f)&{& while(!feof(f))& {&& if(4==fscanf(f,"%s%s%d%d",sz0[iLine],sz1[iLine],&d[iLine][0],&d[iLine][1]))&& {&&& printf("%s %s %d %d\n",sz0[iLine],sz1[iLine],d[iLine][0],d[iLine][1]);&&& }&& && iLine++;& }& fclose(f);&}&else&{& printf("fail to open file.\n");&}
的感言:谢谢 辛苦了 相关知识
其他回答 (1)
#include&stdio.h&
void main()
&& FILE * fp2;
char buffer[64];
if((fp2=fopen("文件","r"))==NULL)
&& printf("con't open file \n");
& exit(1);
while(!feof(fp2))
&if(fgets(buffer,64,fp2)!=NULL)
&& printf("%s",buffer);
& fclose(fp2);
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号关于从txt中读取特定数据的问题_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:327,635贴子:
关于从txt中读取特定数据的问题收藏
txt中的内容如下:&td class='bianhao'&1254478&/td&&td class='bujige'&54&/td&&td class='bianhao'&1254479&/td&&td class='jige'&82&/td&&td class='bianhao'&1254480&/td&&td class='jige'&67&/td&&td class='bianhao'&1254481&/td&&td class='bujige'&56&/td&&td class='bianhao'&1254482&/td&&td class='jige'&73&/td&....现在我想把这里面的数据存在一个二维数组chengji[200][2]里面,chengji[][0]存td class='bianhao'&&/td&中间的数字,chengji[][1]存&td class='bujige'&&/td&或者&td class='jige'&54&/td&中间的数字,请问各位高手,这个应该如何实现?
各位高手可否指点一下?
看看stdio.h中f开头的函数。不难
哈哈哈,用正则表达式
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或如何用C语言讲文本文件中储存的数据读入一个二维数组_百度知道
如何用C语言讲文本文件中储存的数据读入一个二维数组
#include&stdio.h&#include&string.h&#include&&stdlib.h&int&main(){&&&&FILE&*&&&&int&i&=&0;&&&&double&data[100][5];&&&&char&str[100];&&&&&&&&fp&=&fopen(&F:/112.txt&,&&r&);&//打开文件&&&&if&(!fp)&&&&&&&&return&-1;&&&&&&&&while&(!feof(fp))&//&读取数据&&&&{&&&&&&&&fgets(str,&100,&fp);&&&&&&&&strtok(str,&&&&);&&&&&&&&for&(int&n&=&0;&n&&&5;&n++)&//&截取数据&&&&&&&&&&&&data[i][n]&=&atof(strtok(NULL,&&&&));&&&&&&&&i++;&&&&}&&&&fclose(fp);&&&&&&&&for&(int&r&=&0;&r&&&i;&r++)&//&打印数据&&&&{&&&&&&&&for&(int&n&=&0;&n&&&5;&n++)&&&&&&&&&&&&printf(&%lf&&,&data[r][n]);&&&&&&&&printf(&\n&);&&&&}}
其他类似问题
为您推荐:
提问者采纳
此代码符合你的要求:#include &stdio.h&#include &string.h&#include &stdlib.h&int main(){
char line[1000];
char wLine[1000];
double SIMUL[100][100];
int lineCount = 0;
char *delim=& &;
int ii,fp = fopen(&1.txt&,&r&);
if( fp==NULL){
printf(&fopen error!\n&);
return -1;
memset(line,0x00,sizeof(line));
while(fgets(line,1000,fp)!=NULL){
strtok(line,delim);
for(ii=0;ii&5;ii++){
SIMUL[lineCount][ii] = atof(strtok(NULL,delim));
lineCount++;
fclose(fp);
//打印结果
for(ii=0;ii&lineCii++){
for(jj=0;jj&5;jj++){
printf(&%f &,SIMUL[ii][jj]);
printf(&\n&);
return 0;}
提问者评价
thanks a lot. a lot of thanks to other helpers. i really appreciate it!
其他5条回答
我只能基本上推翻你写的所有程序了,因为你没有实际进行剔除第一个数的操作
#include &stdio.h&
main(int argc, char *argv[])
double SIMUL[100][100];
char line[1000];
int i = 0;
//用于存放每行第一个数,但没有实际作用
FILE *Fsimul = NULL;
if((Fsimul = fopen(&D:\\GLUE\\0818.txt&,&rt&)) == NULL)
return -1;
while ( fgets(line, 1000, Fsimul) != NULL )
sscanf(line, &%d %lf %lf %lf %lf %lf&, &trush, &SIMUL[i][0], &SIMUL[i][1], &SIMUL[i][2], &SIMUL[i][3], &SIMUL[i][4]);
//根据你写的部分程序来看,每行都是有固定的5个数需要录入到数组中,那么这样用sscanf会方便很多
i++; //每行录入完毕后自加进入下一行的录入
自己试试看,下午无聊给你做了一下,我在linux下面跑起来是可以的
完全满足你的最终要求,忽略掉了行号,记录真实数据到二维数组
#include &stdio.h&
#include &string.h&
#include &stdlib.h&
int localize(char *buf);
void linechg(double *dest, char *sour);
int i=0,j=0,k=0,len_f1;
double dest[100];
char sour[100];
double SIMUL[100][100];
f1=fopen(&k2&,&rt&);//改为你自己的路径
if(f1==NULL)
printf(&Fail to open the source file!\n&);
if(fgets(sour,100,f1)==NULL)
return 1; //input complete
linechg(dest, sour);//做单行的处理
strncpy(SIMUL[i],dest,5);
printf(&\n&);...
文本文件中的数据格式如果能自己控制, 并且是固定的话, 完全可以通过#include, 让编译器来帮你读入....
看看这个:
使用fread(),fwrite()这一对函数
二维数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言从TXT文件读取数据存入二维数组的程序如下,哪错了?_百度知道
c语言从TXT文件读取数据存入二维数组的程序如下,哪错了?
#include &stdio.h&#include &string.h&#define MAXLINE 788#define MAXCOLUMN 2void main(void){ FILE * //文件指针 char arr[MAXLINE][MAXCOLUMN]={0};
//定义788行2列的二维数组并初始化 int i = -1; if((fp=fopen(&d:\\plot\\A.txt&,&r&))==NULL){ //打开txt文件
perror(&File open error!\n&); } 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]中的字串
//data数组列加一
printf(&\n&);
} //循环完毕后,所有数据已在data数组中 printf(&\n&); fclose(fp);
//关闭指针}
TXT文件部分数据如下: - -000 -400 -800 -174 -324 -474 -623 -773 -072 -222 -521 -670 -820 -200 -600…………………………
出了什么错啊。一大堆代码,有个目标也好找啊
c:\documents and settings\administrator\aa.c(16) : error C2143: syntax error : missing ';' before 'type'c:\documents and settings\administrator\aa.c(18) : error C2065: 'subarr' : undeclared identifierc:\documents and settings\administrator\aa.c(18) : warning C4047: '!=' : 'int ' differs in levels of indirection from 'void *'………………aa.obj - 14 error(s), 3 warning(s)
#include &stdio.h&#include &string.h&!!!!!!#include &stdlib.h&//那个atoi那个函数的头文件,以后查函数的话,把头文件也查一下#define MAXLINE 788#define MAXCOLUMN 2void main(void){ FILE * //文件指针 char arr[MAXLINE][MAXCOLUMN]={0};
//定义788行2列的二维数组并初始化!!!!! int data[MAXLINE][MAXCOLUMN]={0};
//data数组未定义。 int i = -1;//!!!!!!!!!!!!!其实用i=0也是可以的下面的++i换成i++就好了!!!!!!! int j=0;//忘记定义j了。 if((fp=fopen(&d:\\plot\\A.txt&,&r&))==NULL){ //打开txt文件
perror(&File open error!\n&); } 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]中的字串
//data数组列加一
printf(&\n&);
}//这里的{多余了,还是说是这个(while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets)里的,是的话就在前面加上吧 //循环完毕后,所有数据已在data数组中 printf(&\n&); fclose(fp);
//关闭指针} 语法错误的好像就这些了,不过啊,程序还是错了的 char arr[MAXLINE][MAXCOLUMN]={0};
//定义788行2列的二维数组并初始化你是从文件里读取字符串的啊,不是读取一个字符,这样子的声明只是读取一个字符而已啊。
C:\Documents and Settings\Administrator\aa.c(19) : error C2143: syntax error : missing ';' before 'type'C:\Documents and Settings\Administrator\aa.c(20) : error C2065: 'subarr' : undeclared identifier^^^^^^^^^^^^^^aa.obj - 7 error(s), 4 warning(s)
这里的while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets问题修改了吗,那里有个大括号不匹配。 要不程序贴出来吧,嗯用私信吧,据说追问过多要扣分的
去你的消息里看看 就在那里发吧,邮箱什么的不太上啊刚刚看了下用fscanf会比较好吧。
参考资料:
其他类似问题
为您推荐:
二维数组的相关知识
其他1条回答
格式很重要....一旦移错了就可能出错.....
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言定义数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信