我正在编写从txt文件读取名称,姓氏和数字并将其保存到结构的函数。文件中的变量以这种方式排列
名称|姓|号码
我的问题是fscanf在读取EOF之前的最后一个数字时遇到问题。
我的代码:
int load_phonebook_t(const char *filename, struct entry_t* p, int size)
{
int a,i,ilosc=0;
FILE *fp;
if(filename==NULL || p==NULL || size<1)
{
return -1;
}
fp=fopen(filename,"r");
if(fp==NULL)
{
return -2;
}
rewind(fp);
for(i=0;i<size;i++)
{
if(i==size-1)
{
a=fscanf(fp,"%s | %s | %d[^EOF]",(p+i)->name,(p+i)->last_name,&(p+i)->number);
}
else
{
a=fscanf(fp,"%s | %s | %d",(p+i)->name,(p+i)->last_name,&(p+i)->number);
}
if(a==3)
{
ilosc++;
}
}
fclose(fp);
return ilosc;
}
我尝试使用fscanf(fp,“%s |%s |%d [^ EOF]”),但没有用。我需要一个想法,如何在EOF之前停止阅读或如何正确阅读。
编辑:
.txt文件中的最后几行:
Annette | Bening | 378422705
George | C.Scott | 209747332
Burt | Lancaster | 568016673
Louis | Gossett Jr. | 528057525
答案 0 :(得分:0)
使用scanf在文件末尾停止很容易。
a=fscanf(fp,"%s | %s | %d",(p+i)->name,(p+i)->last_name,&(p+i)->number);
if (a != 3) {
/* handle eof; */
break;
}
还有很多事情要做,包括格式错误的文件以及在增加阵列时读取一次文件,但是,嘿,宝贝们步步为营。您还将在出现任何IO或格式错误时到达该eof块。