Как было отмечено в комментариях, у вас есть как минимум две ошибки:
Первая проблема заключается в ваших чтениях: оба чтения используют адрес x
и размер y
,Я уверен, что это просто опечатка.
Во-вторых, вам нужно close()
файл, который вы открыли для записи (или, по крайней мере, очистить ваши записи (sync()
) доповторное чтение тех же данных, но для этого требуется много осторожности и специальных правил.) В любом случае, вам нужно закрыть файл, либо оставив дескриптор (в данном случае file
) вне области видимости и получив деструктор с именемили сам звоните file.close()
(после записи)
Чтобы избежать этой проблемы, вам обычно приходится проверять наличие ошибок каждый раз, когда вы делаете какие-либо операции ввода-вывода.Для этого вы можете использовать имя вашего дескриптора файла, например, логическую переменную, например:
in.read(reinterpret_cast<char*>(&x),sizeof(x));
if (!in)
cerr << "First read failed." << endl;
in.read(reinterpret_cast<char*>(&y),sizeof(y));
if (!in)
cout << "Second read failed." << endl;
Если вы хотите знать, что на самом деле происходит, класс std::istream
имеет явное преобразование вbool
, который возвращает, была ли последняя операция выполнена успешно или нет (или находится ли поток в читаемом / хорошем состоянии или нет.) Существует также множество функций-членов, определенных для потоков C ++ (как входных, так и выходных), которые помогают вам проверитьдля ошибок, конца потока и т. д., например, bad()
, good()
, fail()
, eof()
и т. д.
Опять же, просто помните, что любая операция ввода-вывода может завершиться неудачно прив любое время по разным причинам, поэтому проверьте его статус!