[英]feof, doesn't seem to work - text files
我正在使用fgets();
从文本文件中读取行fgets();
我有一个循环: while(!feof(fp))
关键是,即使在我到达并读取最后一行之后,该程序仍会继续进入循环,并且在调试中,文件ptr仅显示点,而不显示数据字符串。
我怎样才能知道自己已经到达终点并且不再进入循环?
while (!feof(fp)) {
if (strcmp(data2->ID ,data1->ID)<0) {
fseek(fp, backTo, SEEK_SET);
fprintf( fp, "%s",lin2);
fprintf( fp, "%s",lin1);
flag = 1;
}
else
{
strcpy(data1->ID,data2->ID);
strcpy(data1->name,data2->name);
data1->price=data2->price;
}
if(fgets(line2, sizeof(line2),fp)!=NULL)
{
itemSize2=strlen(line2)+1;
strcpy(data2->ID,strtok (line2,","));
}
}
文本文件中只有2行,我正在使用fseek并转到文件的开头,然后我两次使用fprintf并在这些行上写,之后应该到达EOF
您是说它一次进入循环吗?
feof(fp)
如果程序尝试读取文件末尾之外的内容,而不是读取文件末尾,则返回true。 系统不一定知道文件是否更多(它可以动态生成, stdin
为stdin
),但确实知道文件是否到达文件末尾。
您需要在每个fgets(fp)
feof(fp)
之后测试feof(fp)
,或测试以查看fgets(fp)
返回了多少个字符,或者执行一个字符的get
和unget
。
好吧,我使用这个自定义功能。
BOOL CheckFileEnd(FILE *fp)
{
BOOL res;
long currentOffset = ftell(fp);
fseek(fp, 0, SEEK_END);
if(currentOffset >= ftell(fp))
res = TRUE;
else
res = FALSE;
fseek(fp, currentOffset, SEEK_SET);
return res;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.