У меня есть одна странная проблема при использовании fwrite() в C. После редактирования файла целыми числами я получаю нуль («0») перед моим последним элементом, который добавлен fwrite(). состоит в том, чтобы разделить целые числа в файле на группы, которые состоят из 10 элементов или меньше.fwrite() puts unknown zero
Например, у меня есть: {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() работает только два раза, он пропустил 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;
}
}
Спасибо за ответы!
Почти всегда неправильно использовать 'feof'. Я попытаюсь найти один из дубликатов, чтобы отметить это через несколько минут. –
Возможный дубликат ["while (! Feof (file))" всегда неверен "(http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) –
@ user3386109: Но он похоже, не читает и не пишет в тот же поток. fp vs hp обрабатывает файлы. –