Я пытался написать короткую программу, позволяющую пользователю добавлять записи в «базу данных», перечисляя записи, которые они вставляли, и возможность очищать все записи без завершения программа. Вот что я получилСоздание и очистка массива структур
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
struct BIRTH
{int month; int year;};
struct ID
{string name; bool vip; float score;
struct BIRTH date;} ;
int main(int argc, char** argv) {
ID **ptrarr;
ptrarr = new ID * [10];
for (int r=0; r<10; r++)
{ptrarr[r] = new ID[1] ;}
int counter = 0;
while(counter<100){
cout << "Type add to create a new entry" << endl;
cout << "Type list to see all entries" << endl;
cout << "Type clear to delete all entries" << endl;
cout << "Type exit to terminate" << endl;
string command = "0";
getline (cin,command);
if(command=="add")
{
cout << "Enter name" << endl;
getline (cin,ptrarr[counter][1].name);
cout << "VIP? 1 for yes, 0 for no" << endl;
cin >> ptrarr[counter][1].vip;
cout << "Enter score" << endl;
cin >> ptrarr[counter][1].score;
cout << "Month of birth" << endl;
cin >> ptrarr[counter][1].date.month;
cout << "Year of birth" << endl;
cin >> ptrarr[counter][1].date.year;
counter++;
}
else if(command=="list")
{
for (int i=0; i<counter; i++)
{int n=i+1;
cout << n << " "
<< ptrarr[i][1].name << " ";
if (ptrarr[i][1].vip)
{cout << "VIP ";}
cout << "Score: " << ptrarr[i][1].score << " "
<< "Born: " << ptrarr[i][1].date.month << "/" << ptrarr[i][1].date.year << endl;
}
}
else if(command=="clear")
{delete[] ptrarr;
cout << "Entries cleared" << endl;}
else if(command=="exit")
{return 0;}
else
cout << "try again" << endl;
}
return 0;
}
Теперь вот сделка: следующий код успешно компилируется, но когда я печатаю в команде «добавить», программа падает (достижение разблокировано, не думаю, что можно получить с таким коротким кодом). Самое главное, что массив состоит из многотипной структуры и что команда «clear» уничтожает все записи в массиве.
ПРИМЕЧАНИЕ: Я понимаю, что есть тысячи лучших способов написать этот фрагмент кода, но я пишу его, чтобы практиковать то, что я до сих пор рассматривал в отношении C++. Так что, если это не является абсолютно необходимым для кода для запуска, пожалуйста, не вводить никаких новых уловок =)
Действительно полезно также =) Теперь я знаю, что именно вызвало крах кода. Кроме того, хорошая точка при удалении каждой записи из массива. Моя интуиция говорила мне, что это то, что я должен делать, но я не знал, как это сделать. То, что я сделал сейчас, это то, что опция clear освобождает записи, чем массив в целом, сбрасывает счетчик и затем создает массив еще раз с тем же кодом, что и в начале основного – Quit