Witam wszystkich,
Czy ktoś mógłby potwierdzić chwilę i podpowiedzieć dlaczego w moim kiepskim kodzie zostaje zgłoszony wyjątek "Element *.exe wyzwolił punkt przerwania."?
Czasami działa, czasami nie. Zauważyłem, że przy użyciu uzupelnij(); dla jednego obiektu działa jak trzeba.
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cstdio>
#include <random>
using namespace std;
class Autobus
{
private:
string kierowca;
public:
int numer;
int iloscMiejsc;
int iloscWolnychMiejsc;
int* tablica;
int wybor;
char *tablicaWolnychMiejsc = new char[iloscMiejsc];
string miejsceStartu;
string miejsceDocelowe;
Autobus(int n, int iM, int iWm, string mS, string mD, string k);
~Autobus();
void wypisz();
};
Autobus::Autobus(int n, int iM, int iWm, string mS, string mD, string k) {
numer = n;
iloscMiejsc = iM;
tablica = new int[iloscMiejsc];
miejsceStartu = mS;
miejsceDocelowe = mD;
kierowca = k;
iloscWolnychMiejsc = iWm;
}
Autobus::~Autobus()
{
delete[] tablica;
delete[] tablicaWolnychMiejsc;
}
void rezerwuj(Autobus *a) {
if (a->iloscWolnychMiejsc > 0) {
a->iloscWolnychMiejsc--;
srand(time(NULL));
bool check = false;
while (check == false) {
int randIndex = rand() % 15;
if (a->tablicaWolnychMiejsc[randIndex] != 'X') {
a->tablicaWolnychMiejsc[randIndex] = 'X';
check = true;
}
}
}
else {
cout << "Niestety, nie ma wolnych miejsc" << endl;
Sleep(2000);
}
}
void wypiszTablice(Autobus* a, char* tablicaWsk) {
system("cls");
a->wypisz();
for (int i = 0; i < a->iloscMiejsc; i++)
{
cout << "[ " << a->tablicaWolnychMiejsc[i] << " ]";
}
cout << endl;
for (int i = 0; i < a->iloscMiejsc; i++)
{
if (i < 10) {
cout << "[ " << i << " ]";
}
else {
cout << "[ " << i << "]";
}
}
cout << endl;
for (int i = 0; i < a->iloscMiejsc; i++)
{
cout << "[ " << tablicaWsk[i] << " ]";
}
cout << endl;
cout << endl;
cout << "Nacisnij ESC by wrocic do menu" << endl;
}
void rezerwujSzczegolowo(Autobus* a) {
system("cls");
bool stop = false;
char znak;
int znakint, pozycja=0;
char* tablicaWsk = new char [a->iloscMiejsc];
a->wypisz();
for (int i = 0; i < a->iloscMiejsc; i++)
{
tablicaWsk[i] = ' ';
}
tablicaWsk[0] = '^';
for (int i = 0; i < a->iloscMiejsc; i++)
{
cout << "[ " << a->tablicaWolnychMiejsc[i] << " ]";
}
cout << endl;
for (int i = 0; i < a->iloscMiejsc; i++)
{
if (i < 10) {
cout << "[ " << i << " ]";
}
else {
cout << "[ " << i << "]";
}
}
cout << endl;
for (int i = 0; i < a->iloscMiejsc; i++)
{
cout << "[ " << tablicaWsk[i] << " ]";
}
cout << endl;
cout << endl;
cout << "Nacisnij ESC by wrocic do menu" << endl;
//cout << "Adres tablicy wolnych miejsc to: " << &a->tablicaWolnychMiejsc;
while (stop == false) {
znak = _getch();
znakint = (int)znak;
cout << znakint;
switch (znakint)
{
case 115: // prawo
if (pozycja < (a->iloscMiejsc)-1) {
tablicaWsk[pozycja] = ' ';
tablicaWsk[++pozycja] = '^';
wypiszTablice(a, tablicaWsk);
}
break;
case 97: // lewo
if (pozycja > 0)
{
tablicaWsk[pozycja] = ' ';
tablicaWsk[--pozycja] = '^';
wypiszTablice(a, tablicaWsk);
}
break;
case 13: // enter
if (a->tablicaWolnychMiejsc[pozycja] != 'X') {
a->tablicaWolnychMiejsc[pozycja] = 'X';
a->iloscWolnychMiejsc--;
wypiszTablice(a, tablicaWsk);
}
break;
case 27: // escape
stop = true;
break;
default:
break;
}
}
}
void Autobus::wypisz() {
cout << "Numer: Ilosc Miejsc: IloscWolnychMiejsc: Miejsce Startu: Miejsce Docelowe: Kierowca: " << endl;
cout << numer << ". " << iloscMiejsc << ". " << iloscWolnychMiejsc << " " << miejsceStartu << " " << miejsceDocelowe << " " << kierowca << endl << endl;
}
int rezerwacja() {
int numer;
cout << "Ktory autobus chcesz zarezerwowac? " << endl;
cout << "Autobus nr: "; cin >> numer;
return numer;
}
void wypiszWszystkie(Autobus *a1, Autobus* a2, Autobus* a3, Autobus* a4, Autobus* a5) {
a1->wypisz();
a2->wypisz();
a3->wypisz();
a4->wypisz();
a5->wypisz();
}
void uzupelnij(Autobus* a) {
for (int i = 0; i < a->iloscMiejsc; i++)
{
a->tablicaWolnychMiejsc[i] = ' ';
}
}
void wypiszMenu() {
cout << "[1] ZAREZERWUJ MIEJSCE" << endl;
cout << "[2] ZAREZERWUJ SZCZEGOLOWO MIEJSCE";
cout << endl;
}
int main()
{
Autobus a1(1, 16, 16, "Gniezno", "Lodz", "Zasada");
Autobus a2(2, 16, 16, "Koluszki", "Helm", "Ziobro");
Autobus a3(3, 16, 16, "Warszawa", "Huta", "Adrian");
Autobus a4(4, 16, 16, "Kalisz", "Mata", "Geralt");
Autobus a5(5, 16, 16, "Zakopane", "Bale", "Najman");
uzupelnij(&a1);
uzupelnij(&a2);
uzupelnij(&a3);
uzupelnij(&a4);
uzupelnij(&a5);
int wybor = 0;
int numer = 0;
while (true)
{
system("cls");
wypiszWszystkie(&a1, &a2, &a3, &a4, &a5);
wypiszMenu();
cin >> wybor;
switch (wybor)
{
case 1:
numer = rezerwacja();
switch (numer) {
case 1:
rezerwuj(&a1);
break;
case 2:
rezerwuj(&a2);
break;
case 3:
rezerwuj(&a3);
break;
case 4:
rezerwuj(&a4);
break;
case 5:
rezerwuj(&a5);
break;
default:
cout << "Nie ma tyle autobusow" << endl;
break;
}
break;
case 2:
numer = rezerwacja();
switch (numer) {
case 1:
rezerwujSzczegolowo(&a1);
break;
case 2:
rezerwujSzczegolowo(&a2);
break;
case 3:
rezerwujSzczegolowo(&a3);
break;
case 4:
rezerwujSzczegolowo(&a4);
break;
case 5:
rezerwujSzczegolowo(&a5);
break;
default:
break;
}
default:
break;
}
}
return 0;
}