Массив books заполняется, но после перехода в main массив очищается, и присваивается другой адрес. Как сделать, чтоб поиск происходил в заполненном массиве?
#define SIZE 4
using namespace std;
bool porivniannia(char* clas, char* my);
class library {
private:
class book
{
public:
char avtor[20];
char nazva[30];
int rik;
book()
{
int i = 0;
while (i < 20)
{
avtor[i] = '\0';
i++;
}
i = 0;
while (i < 30)
{
nazva[i] = '\0';
i++;
}
rik = 0;
}
book(const char* avtor, const char* nazva, int rik)
{
this->rik = rik;
int i = 0;
while (avtor[i])
{
this->avtor[i] = avtor[i];
i++;
}
i = 0;
while (nazva[i])
{
this->nazva[i] = nazva[i];
i++;
}
}
void get()
{
cout << avtor << nazva << rik << endl;
}
};
public:
class book;
book books[SIZE];
library()
{
book books[SIZE] =
{
books[0] = book("Іван Франко", "Фарбований лис", 1921),
books[1] = book("Тарас Шевчкенко", "Кобзар", 1885),
books[2] = book("Рудавський", "збірник задач", 2001),
books[3] = book("Сканаві", "збірник задач", 1969)
};
}
void search_avtor(const char* avtor)
{
int i = 0;
while (i <= SIZE)
{
bool a = porivniannia(books[i].avtor, (char*)avtor);
if (a) books[i].get();
}
}
void search_nazva(const char* nazva)
{
int i = 0;
while (i <= SIZE)
{
bool a = porivniannia(books[i].nazva, (char*)nazva);
if (a) books[i].get();
}
}
void search_rik(int rik)
{
int i = 0;
while (i <= SIZE)
{
if (books[i].rik == rik) books[i].get();
}
}
};
bool porivniannia(char* clas, char* my)
{
int i = 0;
bool a = true;
while (my[i] != '\0' && a)
{
if ((my[i] != clas[i]) || clas[i] == '\0') a = false;
}
if (clas[i] != '\0') return false;
return a;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
library a;
a.search_avtor("Іван Франко");
a.search_nazva("Кобзар");
a.search_rik(1869);
return 0;
}
Смотрите: вы объявляете в классе массив books:
book books[SIZE];
но не трогаете его, вместо этого создавая в конструкторе локальный массив с тем же именем, который существует ровно до завершения конструктора:
library()
{
book books[SIZE] =
{
books[0] = book("Іван Франко", "Фарбований лис", 1921),
books[1] = book("Тарас Шевчкенко", "Кобзар", 1885),
books[2] = book("Рудавський", "збірник задач", 2001),
books[3] = book("Сканаві", "збірник задач", 1969)
};
}
Все понятно?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости