Witam.
Mam do zrobienia na studia program z zakresu list jednokierunkowych. Niestety utknąłem przy 3 podpunkcie. Otóż nie wiem czy w dobry sposób wyszukuję dane z listy, bo nie chcą się usunąć. Proszę o wskazówkę.
https://imageshack.com/i/pnENtZeJp
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
struct Rosliny
{
int wiek;
string gatunek;
float cena;
Rosliny*nast;
};
void drukuj_liste (Rosliny *adr)
{
cout << "\nLista roslin:" << endl;
while (adr != NULL)
{
cout << "Wiek rosliny: " << adr->wiek << "\nNazwa gatunku: " << adr->gatunek << "\nCena: " << adr->cena <<endl;
adr = adr->nast;
}
cout << endl;
}
void kasuj_liste (Rosliny *adr)
{
Rosliny *tmp;
while (adr != NULL)
{
tmp = adr;
adr = adr->nast;
delete tmp;
}
}
int main(int argc, char *argv[])
{
Rosliny *glowa, *aktualny, *poprzedni;
int wiek=0;
float cena=0;
aktualny = NULL;
poprzedni = NULL;
glowa = poprzedni;
int ile = 0;
int n = 0;
cout << "Ile roslin chcesz dodac?" << endl;
cin >> n;
for (int i=0; i<n; i++)
{
int wiekRosliny;
string tempWiek;
string gatunekRosliny;
float cenaRosliny;
string tempCena;
bool liczba;
cout<<"Podaj wiek rosliny: \n";
cin >> tempWiek;
do
{
liczba = true;
if (tempWiek[0] > '0' && tempWiek[0] <= '9')
{
for (int i = 1; i < tempWiek.size(); i++)
{
if (tempWiek[i] >= '0' && tempWiek[i] <= '9')
continue;
else
{
liczba = false;
break;
}
}
}
else
liczba = false;
if (liczba)
{
wiekRosliny = atoi(tempWiek.c_str());
}
else
{
cout << "Liczba podana nieprawidlowo. Prosze podac wiek ponownie: ";
cin >> tempWiek;
}
}while (liczba == false);
wiek += wiekRosliny;
cout<<"Podaj gatunek: \n";
cin >>gatunekRosliny;
cout<<"Podaj cene: \n";
cin >> tempCena;
do
{
liczba = true;
if (isdigit(tempCena[0]))
{
for (int i = 1; i < tempCena.size(); i++)
{
if (isdigit(tempCena[i]))
continue;
else
{
liczba = false;
break;
}
}
}
else
liczba = false;
if (liczba)
{
cenaRosliny = atoi(tempCena.c_str());
}
else
{
cout << "Pole figury podane nieprawidlowo. Prosze podac pole ponownie: ";
cin >> tempCena;
}
}while (liczba == false);
cena +=cenaRosliny;
poprzedni = aktualny;
aktualny = new Rosliny;
aktualny -> wiek = wiekRosliny;
aktualny -> gatunek = gatunekRosliny;
aktualny -> cena = cenaRosliny;
aktualny ->nast = NULL;
if(poprzedni!=NULL){
poprzedni->nast = aktualny;
ile++;
}
else
glowa = aktualny;
}
drukuj_liste(glowa);
string gatunekUzytkownika;
int licznikPetli=0, licznikUsuniec=0;
cout << "Jaki gatunek chcesz usuwac?\n";
cin >> gatunekUzytkownika;
for (poprzedni=glowa->nast ; poprzedni!=NULL&&poprzedni->nast!=NULL; poprzedni = poprzedni->nast->nast)
{
if (poprzedni->gatunek==gatunekUzytkownika)
{
licznikPetli++;
if (licznikPetli==2)
{
licznikUsuniec++;
licznikPetli=0;
kasuj_liste(poprzedni);
}
}
}
cout << endl << licznikUsuniec << endl;
drukuj_liste(glowa);
return 0;
}