繁体   English   中英

feof,似乎不起作用-文本文件

[英]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。 系统不一定知道文件是否更多(它可以动态生成, stdinstdin ),但确实知道文件是否到达文件末尾。

您需要在每个fgets(fp) feof(fp)之后测试feof(fp) ,或测试以查看fgets(fp)返回了多少个字符,或者执行一个字符的getunget

好吧,我使用这个自定义功能。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM