我有一个文件,其中包含公司员工的信息(姓名及其ID)。 样本文件:
Sailesh 160031158
约翰160031145
山姆160031499
我需要将这些内容扫描到链接列表中。如果我知道文件中存在的员工数量(比如“x”),我可以使用以下代码片段将它们存储在链接列表中:
struct node
{
int id;
char name[100];
struct node *next;
}*start=NULL,*new,*prev;
void scan()
{
fp=fopen("employee_info.c","r");
for(i=0;i<x;i++)
{
if(start==NULL)
{
new=(struct node *)malloc(sizeof(struct node));
start=new;
fscanf(fp,"%s%d",new->name,&new->id);
new->next=NULL;
prev=new;
}
else
{
new=(struct node *)malloc(sizeof(struct node));
fscanf(fp,"%s%d",new->name,&new->id);
new->next=NULL;
prev->next=new;
prev=new;
}
}
}
但问题是我应该能够将文件中的详细信息扫描到链表中而不知道没有。在场的员工('x')。
答案 0 :(得分:1)
从C文档中,方法for
具有以下返回值
成功时,该函数返回参数的项数 列表已成功填写。此计数可以匹配预期的数量 由于匹配失败,读数,项目或更少(甚至为零) 错误,或文件结尾的范围。
如果发生读取错误或达到文件结尾 阅读,设置正确的指标(feof或ferror)。 而且,如果有的话 在成功读取任何数据之前发生,返回EOF。
因此,而不是您的EOF
循环,尝试将fscanf的结果放入while循环并测试while(fscanf(fp,"%s%d", new->name, &new->id) != EOF) {
// Do something
}
返回值。像这样:
{{1}}