请帮忙,如何把文件内容读取后存入数组

huoleifeng 2007-07-03 04:18:46
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;

STUDENT students[50]

如何把结构如下的文件中的数据读取后存入数组?

[第一名]
姓名=***;
性别=***;
年龄=***;
[第二名]
姓名=***;
性别=***;
年龄=***;
.
.
.





希望能给出源代码,一定要C语言的,谢谢!!!
...全文
351 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2007-07-10
  • 打赏
  • 举报
回复
ding
ffll8281 2007-07-10
  • 打赏
  • 举报
回复
楼上,你的readini函数没有读懂啊,可否加上注释
gxlian 2007-07-04
  • 打赏
  • 举报
回复
以上两种都可,已测试!
gxlian 2007-07-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;

STUDENT students[50];

int readspace(FILE* tempfp)
{
char ch;
ch = getc(tempfp);

while(ch == ' ' || ch == '\n')
{
ch = getc(tempfp);
}
if(ch == EOF)
return 0;
fseek(tempfp,-1L,1);
return 1;
}

void main()
{
FILE *fp;
if((fp = fopen("student.txt","r")) == NULL)
{
printf("Can't open student.txt.\n");
exit(-1);
}

char order[50][3];
int exitflag;
int i = 0;

while(!feof(fp))
{
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"[第%s",order[i]);
if(exitflag == 0)
break;
int orderlenth = strlen(order[i]) - strlen("名]");
order[i][orderlenth] = '\0';

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"姓名=%s",students[i].name);
if(exitflag == 0)
break;
int namelenth = strlen(students[i].name)-1;
(students[i].name)[namelenth] = '\0';

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"性别=%s",students[i].gender);
if(exitflag == 0)
break;
int genlenth = strlen(students[i].gender)-1;
(students[i].gender)[genlenth] = '\0';

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"年龄=%d;",&students[i].age);
if(exitflag == 0)
break;
i++;
}

//test result
for(int j = 0; j < i; j++)
{
printf("第%s名: %s %s %d\n",order[j],students[j].name,students[j].gender,students[j].age);
}
fclose(fp);
}
gxlian 2007-07-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;

STUDENT students[50];

int readspace(FILE* tempfp)
{
char ch;
ch = getc(tempfp);

while(ch == ' ' || ch == '\n')
{
ch = getc(tempfp);
}
if(ch == EOF)
return 0;
fseek(tempfp,-1L,1);
return 1;
}

void main()
{
FILE *fp;
if((fp = fopen("student.txt","r")) == NULL)
{
printf("Can't open student.txt.\n");
exit(-1);
}
int order = 0;
int exitflag;
while(!feof(fp))
{
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"[第%d名]",&order);
if(exitflag == 0)
break;

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"姓名=%s",students[order].name);
if(exitflag == 0)
break;
int namelenth = strlen(students[order].name)-1;
(students[order].name)[namelenth] = '\0';

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"性别=%s",students[order].gender);
if(exitflag == 0)
break;
int genlenth = strlen(students[order].gender)-1;
(students[order].gender)[genlenth] = '\0';

exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"年龄=%d;",&students[order].age);
if(exitflag == 0)
break;
}

//test result
for(int i = 1; i < 50; i++)
{
printf("第%d名: %s %s %d\n",i,students[i].name,students[i].gender,students[i].age);
}
fclose(fp);
}
believefym 2007-07-03
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;

STUDENT students[50];
int main()
{
FILE* pf = fopen("g:\\c\\TextFile1.txt","r");
char t1[80]={0};
char name[80]={0};
char gender[80]={0};
char age[80]={0};
int i=0;

int ln = strlen("姓名=");
int lg = strlen("性别=");
int la = strlen("年龄=");

while (fscanf(pf,"%s",t1)!=EOF)
{
fscanf(pf,"%s%s%s",name,gender,age);
strncpy(students[i].name,name+ln,strlen(name)-ln-1);
strncpy(students[i].gender,gender+lg,strlen(gender)-lg-1);
char aget[10]={0};
strncpy(aget,age+la,strlen(age)-la-1);
students[i].age = atoi(aget);
printf("%d\tname:%s\tgender:%s\tage:%d\n",i,students[i].name,students[i].gender,students[i].age);
++i;
}

fclose(pf);
system("pause");
return 0;

}
cceczjxy 2007-07-03
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;

STUDENT students[50];

void cut(char *tmp)
{
if(tmp==NULL)return;
while(*tmp)
if(*tmp=='\n'||*tmp=='\r')
{
*tmp=0;
return ;
}
else tmp++;
}


void readini(FILE *file,char *group,char *member,char *values)
{
char buf[128],tmpbuf1[128],tmpbuf2[128],*p1;
int len=0,flag=0;
memset(buf,0,128);
rewind(file); //
while(fgets(buf,128,file))
{
p1=buf;
cut(buf);
if(strcmp(buf,group)==0){flag=1;continue;}//
if(flag)
{
if((strlen(buf)==0)||(*p1=='['))
{
values=NULL;
break;
}//
len=strcspn(buf,"="); //
memset(tmpbuf1,0,128);
memset(tmpbuf2,0,128);
strncpy(tmpbuf1,buf,len);
p1+=len;
p1++;
if(strcmp(tmpbuf1,member)==0)
{
strcpy(values,p1);
break;
}//
}
memset(buf,0,128);
}
cut(values);
}


int main()
{
char buf[128],temp[32];
FILE *file;
int i;
file=fopen("file.txt","r");
for(i=1;i<50;i++)
{
memset(temp,0,sizeof(temp));
sprintf(temp,"[第%d名]",i);//怎么循环汉字,你自己想想吧,我没想好

memset(buf,0,sizeof(buf));
readini(file,temp,"姓名",buf);
strcpy(students[i].name,buf);

memset(buf,0,sizeof(buf));
readini(file,temp,"性别",buf);
strcpy(students[i].gender,buf);

memset(buf,0,sizeof(buf));
readini(file,temp,"年龄",buf);
students[i].age=atoi(buf);

}
fclose(file);
}
neosu 2007-07-03
  • 打赏
  • 举报
回复
使用FILE * fp = fopen(文件名, "r"); 打开文件
使用fgets一行行提取文本
判断文本的特征匹配到你的变量。
jixingzhong 2007-07-03
  • 打赏
  • 举报
回复
读取后一个一个赋值

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧