Мое лучшее предположение о том, почему оригинал не удался, заключается в том, что когда вы читаете последний символ из файла, устанавливается бит EOF .В этом состоянии все операции чтения и записи не выполняются.Вы можете записать в поток файлов, который достиг своего конца, сначала вызвав clear
.
// the following doesn't truncate file, or handle other error conditions.
if (datafile.eof()) {
datafile.clear();
}
datafile.seekp(0, std::ios_base::beg);
datafile << score_num;
Однако это не решит всех ваших проблем.Если вы записываете в файл меньше, чем его текущая длина (например, старый высокий балл был «1,5», а новый высокий балл - «2»), часть старых данных все равно будет присутствовать в конце файла.Пока оценки никогда не имеют дробной части (в этом случае вы, вероятно, должны использовать целочисленный тип, такой как unsigned long
), вы не заметите ошибку, так как a ftruncate
).