Для файла text вы можете легко вывести одну переменную на строку, используя <<
к той, которую вы используете с std::cout
.
Для двоичного файла необходимо использовать std::ostream::write()
, который записывает последовательность байтов.Для вашего age
атрибута вам нужно будет reinterpret_cast
это const char*
и записать столько байтов, сколько необходимо для хранения int
для вашей архитектуры машины.Обратите внимание, что если вы намереваетесь прочитать эту двоичную дату на другом компьютере, вам придется учитывать размер слова и порядковый номер .Я также рекомендую обнулить буферы name
и surname
перед их использованием, чтобы в результате не возникли артефакты неинициализированной памяти в вашем двоичном файле.
Также нет необходимости передавать атрибуты классав метод to_file()
.
#include <cstring>
#include <fstream>
#include <iostream>
class info
{
private:
char name[15];
char surname[15];
int age;
public:
info()
:name()
,surname()
,age(0)
{
memset(name, 0, sizeof name);
memset(surname, 0, sizeof surname);
}
void input()
{
std::cout << "Your name:" << std::endl;
std::cin.getline(name, 15);
std::cout << "Your surname:" << std::endl;
std::cin.getline(surname, 15);
std::cout << "Your age:" << std::endl;
std::cin >> age;
to_file();
}
void to_file()
{
std::ofstream fs("example.bin", std::ios::out | std::ios::binary | std::ios::app);
fs.write(name, sizeof name);
fs.write(surname, sizeof surname);
fs.write(reinterpret_cast<const char*>(&age), sizeof age);
fs.close();
}
};
int main()
{
info ob;
ob.input();
}
Пример файла данных может выглядеть следующим образом:
% xxd example.bin
0000000: 7573 6572 0000 0000 0000 0000 0000 0031 user...........1
0000010: 3036 3938 3734 0000 0000 0000 0000 2f00 069874......../.
0000020: 0000 ..