我在C.中使用fwrite()时有一个奇怪的问题。在用整数编辑文件后,我得到零(" 0")之前我的最后一个元素是由fwrite()添加的。我的练习是将文件中的整数除以10个或更少元素的组。
例如,我有:
{2, 3, 9, 4, 6, 7, 5, 87, 65,12, 45, 2, 3, 4, 5, 6, 7, 8, 9}
编辑后我需要:
{2, 3, 9, 4, 6, 7, 5, 87, 65, 12, 87, 45, 2, 3, 4, 5, 6, 7, 8, 9, 45 };
使用下面的代码我得到:
{2, 3, 9, 4, 6, 7, 5, 87, 65, 12, 87, 45, 2, 3, 4, 5, 6, 7, 8, 9, 0, 45 };
在逐步调试的过程中, fwrite()只能运行两次,它在前10个元素之后会有87个,而在剩下的之后会有45个.Zero没有被fwrite()写入。是吗那么?从哪里来呢?
我的代码:
while (!feof(fp)) {
fread(&elems[k], sizeof(int), 1, fp);
fwrite(&elems[k], sizeof(int), 1, hp);
++k;
if (k == 10 || feof(fp)){
for (i = 0; i < 10; ++i){
if (elems[i] > max_number){
max_number = elems[i];
}
}
fwrite(&max_number, sizeof(int), 1, hp);
for (i = 0; i < 10; ++i){
elems[i] = 0;
}
max_number = INT_MIN;
k = 0;
}
}
感谢答案!
答案 0 :(得分:1)
feof
会导致阅读额外的项目。fwrite
和fread
来电的错误。
EOF
错误。 fread
返回0个项目,则该值将保留为之前的值。可能是0.这可能是你的额外0来自哪里。