gpt4 book ai didi

c - c 中的 fread 循环计数器缺少奇数

转载 作者:行者123 更新时间:2023-11-30 15:52:41 24 4
gpt4 key购买 nike

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

例如:如果我有 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 文件)

最佳答案

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

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

    完全摆脱 feof 调用。

  2. 您确定 sizeof(customer) 与文件中的实际内容匹配吗?

  3. 为什么要在递增计数器之前打印counter

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

关于c - c 中的 fread 循环计数器缺少奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com