Problem z zadaniem z listami jednokierunkowymi

0

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
zadanie

#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;
}

1

Zdrowo przekombinowany kod.
Tutaj jest wytłumaczona lista jednokierunkowa w prosty sposób.

Jeśli już korzystasz z std::string dodaj nagłówek <strign> i korzystaj z jego dobrodziejstw.

if (liczba)
{
	cenaRosliny = std::stof(tempCena);
}

atoi zwraca int, potrzebujesz mieć float, więc tracisz precyzję (część danych).
Podnieś poziom ostrzeżeń kompilatora, a będzie informował cię o takich sytuacjach.

Zasada korzystanie z new i delete.

1 użytkowników online, w tym zalogowanych: 0, gości: 1