提问人:Pentakorr 提问时间:6/3/2023 最后编辑:Pentakorr 更新时间:6/3/2023 访问量:32
我在计算二进制文件中的“项目”数量时遇到了麻烦。C
I have a trouble in counting amount of "items" in binary file. C
问:
我想使用 feof 和 fseek 函数计算二进制文件中“项目”的数量。 我有一个二进制文件,里面有字符中的人名和浮动中的薪水。 在每个名称之前都有一个 int,表示名称中的字符数量。 例如,我的文件可能看起来像这样(但没有空格和 \0): 5丹尼5000.00 4莱娜2500.50
例如,一个项目是“4LENA2500.50”。
在我的代码中,while 循环不会停止。 我能做些什么来修复问题?
谢谢!
int count_items(FILE* file)
{
int count=0;
int curr_name_len;
while (!feof(file))
{
fread(&curr_name_len, sizeof(int), 1, file);
fseek(file, (curr_name_len * sizeof(char)) + sizeof(float), SEEK_CUR);
count++;
}
rewind(file);
return count;
}
答:
0赞
caulder
6/3/2023
#1
feof
不检查文件是否在 EOF 上,而是检查文件的 eOF 指示器是否在上一个操作中设置。 允许搜索任意位置(如果操作系统和文件系统支持此功能),以允许在文件内部使用孔进行写入,如果您打算在两者之间写入内容,这将非常有用。
因此,eof-指示器是在 -call 之后设置的,但在 -call 之后被清除。
所以这应该有效:fseek
fread
fseek
int count_items(FILE* file)
{
int count=0;
int curr_name_len;
for (fread(&curr_name_len, sizeof(int), 1, file);
!feof(file);
fread(&curr_name_len, sizeof(int), 1, file))
{
fseek(file, (curr_name_len*sizeof(char))+sizeof(float), SEEK_CUR);
count++;
}
rewind(file);
return count;
}
或者,如果您不喜欢这种风格:
int count_items(FILE* file)
{
int count=0;
int curr_name_len;
fread(&curr_name_len, sizeof(int), 1, file);
while (!feof(file))
{
fseek(file, (curr_name_len*sizeof(char))+sizeof(float), SEEK_CUR);
count++;
fread(&curr_name_len, sizeof(int), 1, file);
}
rewind(file);
return count;
}
或结构较少,但更清晰:
int count_items(FILE* file)
{
int count=0;
int curr_name_len;
while (true);
{
if (sizeof(int) != fread(&curr_name_len, sizeof(int), 1, file)))
{
break;
}
fseek(file, (curr_name_len*sizeof(char))+sizeof(float), SEEK_CUR);
count++;
}
if (feof(file))
{
rewind(file);
return count;
}
if (ferror(file))
{
/* error handling */
}
else
{
/* fatal error handling */
}
}
评论
5danny
'5'