while (!feof(f))
не означает, что вы думаете, что это значит. Это не означает, что «текущая позиция находится в конце файла», это означает «последняя попытка чтения прочитала конец файла»: это флаг, установленный fread
и другими, и очищенный fseek
и другими. fread
имеет возвращаемое значение. Это возвращаемое значение указывает, было ли чтение успешным. Используйте это как условие вашего цикла.
Вы также игнорируете возвращаемое значение fseek
, что плохо по тем же причинам, но это не является причиной вашей проблемы, по крайней мере, не напрямую.
Кстати, я предполагаю, что это просто код для эксперимента с fseek
, но ваши fseek
в цикле устанавливают позицию на то место, где она должна быть, поэтому она не добавляет никакого значения.