Итак, я учусь, как использовать потоки для создания файлов моего собственного типа, у меня есть простая версия, которая работает так:
struct Appointment
{
Appointment()
{
}
//
//and int to represent a certain doctor
int doctorID; // an enum to be made later
int year; // 1950 - 2050 100 years total
int month; // 0 - 11
int day; // 0 - 31
int hour; // 0 - 23
int minute; // 0 - 59
static Appointment GetDataFromUser()
{
Appointment appoint = Appointment();
cout << "\nEnter a Doctor ID :" << endl;
cin >> appoint.doctorID;
cout << "\nEnter a year 1900 - 3000 :" << endl;
cin >> appoint.year;
cout << "\nEnter a month 0 - 11 :" << endl;
cin >> appoint.month;
cout << "\nEnter a day of month 0 - 31 :" << endl;
cin >> appoint.day;
cout << "\nEnter an hour 0 - 23 :" << endl;
cin >> appoint.hour;
cout << "\nEnter an minute 0 - 59 :" << endl;
cin >> appoint.minute;
cout << "\nAll values entered thank you!" << endl;
return appoint;
}
};
, затем где-то я использую
ifstream ifilestream( fileName.c_str(), std::ios_base::in | std::ios::binary );
Appointment appoint;
ifilestream.read((char *)&appoint, sizeof(Appointment));
и
ofstream ofilestream( fileName.c_str(), std::ios_base::out | std::ios::binary );
Appointment appoint = Appointment::GetDataFromUser();
ofilestream.write((char *)&appoint, sizeof(Appointment));
Это работает нормально, но я хочу заменить int doctorID на char char IDID длина [length] может = 20 или около того, чтобы сохранить имя доктора с пробелами и.Например, пользователь может ввести «Dr. Watson» или просто «Watson».
Но когда я делаю и использую cin для получения этой информации, это нарушает кодовую причину пробелов или что-то еще, в чем я не уверен.Так какой же правильный способ сделать это?
И второй вопрос: что, если бы я хотел, чтобы длина char [] была определена, когда пользователь вводит его?