0

大家好,我有这个功能可以告诉我数据文件中有多少条记录。但是,每当我运行它时,它只会读取偶数记录

例如:如果我有 0 条记录,则输出 0

有 1 条记录,它输出 0

有 2 条记录,它输出 1

用 3 它输出 1

用 4 它输出 2

(顺便说一句,它对于客户和产品数据库项目 customer 是一个结构,而 filep 是指向在此代码上方定义的文件 customerfile 的指针)我在 eclipse 上运行并且只能使用 gnu89/90 方言,如果这会产生差异

   int CusFileNumber(void)
{
    customer tempcus;
    filep = fopen(customersFile, "r");
    fseek (filep,0,SEEK_SET);
    int counter =0;

    while(!feof(filep))
    {
        fread(&tempcus,sizeof(customer),1,filep);
        printf ("%d",counter);
        counter ++;
    }
    fclose(filep);
    return (counter-1);
}

所以我更新了代码以摆脱 feof

看起来像这样

int CusFileNumber(void)
{
    customer tempcus;
    filep = fopen(customersFile, "r");
    fseek (filep,0,SEEK_SET);
    int counter =0;

    while(fread(&tempcus, sizeof(customer), 1, filep) == 1)
    {
        printf ("%d",counter);
        counter ++;
    }
    fclose(filep);
    return (counter);
}

但是这次我仍然遇到同样的问题,它没有计算偶数

这意味着在每个奇数计数器上递增 1,但当我在文件中有偶数条记录时保持不变(顺便说一句,它是一个 .dat 文件)

4

1 回答 1

1
  1. 你不能这样用feof(3)。它只告诉你流是否已经结束,而不是它即将结束。您需要将fread调用放入循环条件并检查其返回值:

    while (fread(&tempcus, sizeof(customer), 1, filep) == 1)
    

    完全摆脱feof通话。

  2. 您确定sizeof(customer)与文件中的内容相符吗?

  3. 为什么要counter在增加之前打印?

  4. 你为什么要返回counter - 1而不是返回counter

于 2013-01-09T23:16:01.570 回答