Итак, я пытался сохранить данные всей структуры в файл и затем прочитать их обратно из файла, который вы можете увидеть здесь, в моем коде. Я записываю данные в структуру (введенную пользователем), которая затем сохраняется вфайл, использующий функцию myFile.write для сохранения объекта
Как показано в приведенном ниже коде, когда программа запускается в первый раз, и я ввожу данные после этого, когда снова возвращаюсь в меню, а затем нажимаю 2 для загрузки данных.работает и загружает данные успешно (что я думаю). после этого он возвращается в меню, и я нажимаю 3, и он показывает все созданные мной рейсы (очевидно, потому что данные в настоящее время находятся в основной памяти и не готовятся по файлу)
//Global Variables
string savedFlight = "airportsDB\\SavedFlights.txt"; //path
const unsigned short NUMBER_OF_AIRPORTS = 8;
int gFlightSize=0;
ifstream rFlightData;
ofstream wFlightData;
//SKipped some part
struct flight {
airport depature;
airport arrival;
double crsAlt;
double distance;
double fuel;
void flight::createFlight();
void flight::showFlight();
};
void flight::createFlight() {
cout << "Please insert depature airport (ICAO) : ";
cin>>depature.icao;
if(searchapt(depature.icao)){
cout << "Please insert arrival airport (ICAO) : ";
cin>>arrival.icao;
if(searchapt(arrival.icao)){
cout<<"Enter Cruise Altitude [3000<Altitude<50000] : ";
cin>>crsAlt;
if(crsAlt>50000 || crsAlt<3000){
cout<<"Unable CruiseAltitude Please put DIGITS* between 50,000ft and 3,000ft ";
}
else{
//CNTINUE HERE
}
}
else{
cout<<"Arrival Airport Does Not Exist In DataBase";
}
}
else{
cout<<"Departure Airport Does Not Exist In DataBase";
}
}
void flight::showFlight(){
cout<<"\n Departure Airport : "<<depature.icao
<<"\n Arrival Airport : "<<arrival.icao
<<"\n Cruise Altitude : "<<crsAlt
<<"\n\n__________________________________________________\n\n";
}
//(Skipped some part)
void writeFlightData(){
int i=gFlightSize;
cout<<"How many flights do you want to add : ";
cin>>gFlightSize;
saveCounter(gFlightSize);
flights=new flight[gFlightSize];
wFlightData.open(savedFlight,ios::app);
textColor(12);
cout<<"USE UPPERCASE LETTER !\n";
textColor(15);
while(i<gFlightSize){
flights[i].createFlight();
wFlightData.write((char *)&flights[i], sizeof(flights[i]));
i++;
}
wFlightData.close();
}
void loadFlightData(){
rFlightData.open(savedFlight);// , ios::in); // open file for reading
cout << " Loading Saved flights from disk";
for(int i=3;i>0;i--){ //REVERSE LOOP FOR A TWIST
cout<<" . ";
Sleep(800);
}
cls
if(rFlightData.fail()){
cout << "\nAn error occured while loading Saved Flights from disk .The file is corrupt or does not exist on the specified path\n\a"<<"\n Press any key to go back to the menu";
saveCounter(0);
_getch();
cls
}
else{
Sleep(1000);
for (int i = 0; i < gFlightSize; i++) {
rFlightData.read((char *)&flights[i], sizeof(flights[i])); // read an object from a file
}
cout<<" Data Load Successfull! ";
rFlightData.close(); // close the file
}
}
Я сохраняю счетчик добавлений, который считывается при повторном запуске программы, и он знает размер добавленных мною рейсов
Теперь проблема в том, когда я закрываю эту программу и снова запускаю ее, инажмите 2, чтобы загрузить данные, данные не загружаются, но происходит сбой и выдается ошибка исключения «Неверный нулевой указатель»
* Ошибка отладки!Программа C: \ Windows \ SYSTEM32 \ MSVCP110D.dll Файл: f \ dd \ vctools \ crt_bld \ self_x86_ \ crt \ src \ istream Строка: 734
Выражение: недопустимый нулевой указатель
Для информациио том, как ... (Нажмите Retry для отладки приложения)
*