如何用C语言读取txt文件中的数据到结构体数组中

structemployee{inteid;//员工号charname[30];//姓名,用字符数组存放。姓名的最大长度不超过30个字符chargender;//性别,取... struct employee
{
int eid; //员工号
char name[30]; //姓名,用字符数组存放。姓名的最大长度不超过30个字符
char gender; //性别,取值Male和Female之一
int age; //年龄
double score; //综合得分
char level; //等级,不能直接输入,而是通过计算
} emp[NUM];
int ReadFile(const char *filename, struct employee *emp, int len)
{
FILE *fp;
int i = 0;
fp = fopen("empinfo.txt", "r");
for (i = 0; i < len; i++)
{
fscanf(fp, "%d %s %c %d %f", &emp[i].eid, emp[i].name, emp[i].gender, &emp[i].age, &emp[i].score);
}
fclose(fp);
return 0;
//此处填入代码,实现从文件中读出员工信息
}
读完以后显示是0,不知道为啥,有人能帮忙解决下么?
展开
 我来答
刺友互
高粉答主

2019-06-26 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:65.9万
展开全部

1、在vscode里面添加了Python文件和用于读取的文本文件。

2、然后在txt文件写上一些内容用于待会的内容读取,随便写上即可。

3、此外,我们还必须要导入os文件,这样才可调用os中的一些文件操作方法。

4、然后打开要进行读取内容的文件,并且把读取到的内容数据复制给了变量a。

5、然后把变量a打印即可把内容给展现出来,方便查阅了。

6、接着运行jy.py文件,这样就会开始读取,打印内容。

7、可以看到文件的内容真的被读取到了。

来自大云山双瞳剪水的小飞象
2019-07-16 · TA获得超过1239个赞
知道答主
回答量:47
采纳率:0%
帮助的人:5853
展开全部

用C语言读取txt文件中的数据到结构体数组中的步骤如下:

1、使用VS新建空工程,我们直接点击确定。

2、然后我们新建c文件,用于C语言编译器。

3、然后我们再这个界面输入main.c文件。

4、参考代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX_LINE 1024

void ReadTxt(char* pFilePath)

{

char buf[MAX_LINE];  /*缓冲区*/

FILE *fp;            /*文件指针*/

int len;             /*行字符个数*/

if((fp = fopen(pFilePath,"r")) == NULL)

{

perror("fail to read");

exit (1) ;

}

while(fgets(buf,MAX_LINE,fp) != NULL)

{

len = strlen(buf);

buf[len-1] = '\0';  /*去掉换行符*/

printf("%s %d \n",buf,len - 1);

}

return ;

}

int main()

{

ReadTxt("D:\\test.txt");  //读取TXT文件函数

getchar();

return 0;

}

5、将上述参考代码,复制到main.c文件内,直接编译即可。

6、编译完成后,运行exe程序,执行后显示console程序。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱教育爱学习
高粉答主

2019-10-25 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112720

向TA提问 私信TA
展开全部

#include<stdio.h>

#include<stdlib.h>

#defineN10

typedefstruct

{

charwork_ID[5];

charname[20];

charphone_nu[12];

}student;

intmain(intargc,char*argv[])

{

studentst[N];

FILE*fp;

inti;

intcount;

if(argc!=2)

{

fprintf(stderr,"usage:argcisnottwo\n");

exit(1);

}

if((fp=fopen(argv[1],"rb"))==NULL)

{

fprintf(stderr,"Can'topenthe%s",argv[1]);

}

for(i=0;i<N;i++)

{

if((fscanf(fp,"%s%s%s",st[i].work_ID,st[i].name,st[i].phone_nu))!=3)

{

break;

}

}

count=i;

//display

printf("theturecountis%d\n",count);

for(i=0;i<count;i++)

{

printf("%s\t%s\t%s\n",st[i].work_ID,st[i].name,st[i].phone_nu);

}

return0;

}

扩展资料

结构体变量作为函数参数和返回值

#include<stdio.h>

structSTU{charname[10];intnum;};

voidf1(structSTUd)//值传递

{

structSTUa={"wwu",2};

d=a;

}

structSTUf2(structSTUd)//值传递,但有返回值

{

structSTUb={"wwu4",4};

d=b;

returnd;

}

voidf3(structSTU*d)//指针传递

{

structSTUc={"wwu6",6};

*d=c;

}

intmain()

{

structSTUa={"wwu1",1},b={"wwu3",2043};

structSTUc={"wwu5",5};

f1(a);b=f2(b);f3(&c);

printf("%d%d%d\n",a.num,b.num,c.num);

system("pause");

return0;

}

//输出:146

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
推荐于2018-02-26 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部

根据txt文件中数据的格式,可以用fscanf把数据读取到数组中。

下面以一种最基本的情况为例,给出参考代码。

假定结构体格式为

struct test
{
    int i;
    float f;
};

文本文件约定,第一行为存储结构体总数,从第二行起,每行为一个结构体的数据。每个结构体内数据以空格分隔。

样本文件in.txt如下:

4
1 2.0
3 4.0
5 6.0
7 8.0

那么代码可以写作:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    struct test *v = NULL;
    int n, i;
    FILE *fp;
    
    fp = fopen("in.txt", "r");//打开文件
    if(fp == NULL)return -1; //文件打开失败
    
    fscanf(fp, "%d", &n); //读取结构体数据总数。
    if(n <= 0)//数据总数非法
    {
        fclose(fp);
        return -2;
    }
    v = (struct test*)malloc(sizeof(*v) * n); // 分配内存空间。
    for(i = 0; i < n; i ++)
        if(fscanf(fp, "%d%f", &v[i].i, &v[i].f) != 2) break;//读取数据。
    
    //将读取到的数据输出。
    printf("文件中预计有数据%d个,实际读到%d个\n", n, i);
    n = i;
    
    for(i = 0; i < n; i ++)
        printf("%d,%f\n", v[i].i, v[i].f);
        
    fclose(fp);//关闭文件
    free(v);//释放内存
        
    return 0;
}

在以上文本文件及程序下,运行后的结果为:

文件中预计有数据4个,实际读到4个
1,2.000000
3,4.000000
5,6.000000
7,8.000000
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2015-04-02 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3403万
展开全部
 fscanf(fp, "%d %s %c %d %f", &emp[i].eid, emp[i].name, emp[i].gender, &emp[i].age, &emp[i].score);

该语句有两个问题

1、emp[i].gender前要加取址符&。

2、用%f读入double类型数据,应该改为%l

正确f的写法是:

fscanf(fp, "%d %s %c %d %lf", &emp[i].eid, emp[i].name, &emp[i].gender, &emp[i].age, &emp[i].score);

追问
不行,还是0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式