Prosta klasa sklepowa w c# problem ze zmienną

0

Cześć dostaliśmy na zadanie stworzenie prostej kasy sklepowej z użyciem metod.
W trakcie tworzenia programu napotkałem się na pewniem problem "use of unassigned local variable" wiem ze chodzi o to ze zmienna nie ma przypisanych wartosci, ale po przypisaniu dalej nic sie nie dzieje. Będę wdzięczny za każdą pomoc.

using System;

namespace Kalkulator2
{
    public class Program
    {

        public struct Artykul
        {
            public string nazwa;
            public double cenaSztuka;
            public double cenaKg;


        }

        static void Main(string[] args)
        {
            Artykul chleb;
            Artykul maslo;
            Artykul ser;

            chleb.nazwa = "chleb";
            chleb.cenaSztuka = 2.32;
            chleb.cenaKg = 2.3;

            maslo.nazwa = "maslo";
            maslo.cenaSztuka = 3.20;
            maslo.cenaSztuka = 3.21;

            ser.nazwa = "ser";
            ser.cenaSztuka = 2.50;
            ser.cenaKg = 6.50;

            string wyswietl()
            {
                Console.WriteLine(
                              $"\n   " +
                              $"[1]     {chleb.nazwa} {chleb.cenaSztuka}zł\n   " +
                              $"[2]     {maslo.nazwa} {maslo.cenaSztuka}zł\n   " +
                              $"[3]     {ser.nazwa} {ser.cenaKg}kg\n   ");
                return "";

            }


            Console.WriteLine("-- Kasa sklepowa -- \n\nProszę wybrać artykuł: \n");
            wybor();

            int szt;
            int szt2;
            int szt3;

        
            void wybor()
            {
                Console.WriteLine(wyswietl());
                var operation = Console.ReadLine();
                switch (operation)
                {
                    case "1":
                        Console.Clear();
                        Console.WriteLine("Ile sztuk?");
                        szt = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt);
                        kontynuacja();
                        break;
                    case "2":
                        Console.WriteLine("Ile sztuk?");
                        szt2 = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt2);
                        kontynuacja();
                        break;
                    case "3":
                        Console.WriteLine("Ile sztuk?");
                        szt3 = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt3);
                        kontynuacja();
                        break;

                    default:
                        throw new Exception("Wybrałeś zla operacje\n");
                }
            }
            string kontynuacja()
            {
                Console.WriteLine("1 - dalej \n  2 - zaplac");
                int n = int.Parse(Console.ReadLine());
                switch (n)
                {
                    case 1:
                        Console.Clear();
                        wybor();
                        break;
                    case 2:
                        Console.Clear();
                        zaplac();
                        Console.ReadKey();
                        break;
                }
                return "";
            }
            void zaplac()
            {
                double total;
                double w1 = chleb.cenaSztuka * szt;
                double w2 = maslo.cenaSztuka * szt2;
                double w3 = chleb.cenaKg * szt3;
                if (szt != 0 || szt2 != 0 || szt3 != 0)
                {
                    total = w1 + w2 + w3;
                    Console.WriteLine("Lacznie: {0}", total);
                }
                else
                {
                    Console.WriteLine("blad");
                }
            }
        }
    }
}

screenshot-20211116142609.png

0

"Po przypisaniu" czyli w jaki sposób? Powinieneś w miejscu deklaracji przypisać wartość, np:
int szt = 0;

0

@Ephyron: Próbowałem w taki sposób, ale nic to nie zmienia
screenshot-20211116143806.png

0

Nie powinieneś wywołanie metody "wybor" przenieść pod deklarację zmiennych? Czyli o 4 linijki niżej

0

@Ephyron: Niestety nic to nie zmienia

0

Twoje metody wyswietl, wybor, zaplac są wewnątrz metody Main(), na pewno o to ci chodziło?

0

@Ktos: Nie do końca, ale tylko wtedy mogę się odnieść do danych z tej struktury.. Troszkę pomieszany jest ten program, nie wiem zbytnio jak sie za to zabrać

0

Aby poprawić ten błąd przenieś po prostu wywołanie funkcji wybor() ponizej tego int szt = 0; czyli musi być tak:

Console.WriteLine("-- Kasa sklepowa -- \n\nProszę wybrać artykuł: \n");

int szt = 0;
int szt2 = 0;
int szt3 = 0;

wybor();

(bo obecnie najpierw uruchamiasz wybor(), a potem dopiero inicjalizujesz zmienne)

Ale ogólnie to prawdopodobnie źle się do tego zabierasz - inline functions (funkcje wewnątrz funkcji) się stosuje dość rzadko - raczej zmienne, które mają być współdzielone przez wiele metod stosuje się jako pola twojej klasy.

I w zasadzie prawdopodobnie Artykul nie musi być strukturą, struktur używa się tylko w bardzo określonych okolicznościach.

0

@Ktos:
Próbowałem tym sposobem i dalej ten sam błąd. Niestety musimy to zrobić z wykorzystaniem struktur dlatego jest tak przekombinowane.

1

Coś zrobiłeś nie tak, właśnie skompilowałem, i działa?

using System;

namespace Kalkulator2
{
    public class Program
    {
        public struct Artykul
        {
            public string nazwa;
            public double cenaSztuka;
            public double cenaKg;
        }

        private static void Main(string[] args)
        {
            Artykul chleb;
            Artykul maslo;
            Artykul ser;

            chleb.nazwa = "chleb";
            chleb.cenaSztuka = 2.32;
            chleb.cenaKg = 2.3;

            maslo.nazwa = "maslo";
            maslo.cenaSztuka = 3.20;
            maslo.cenaSztuka = 3.21;

            ser.nazwa = "ser";
            ser.cenaSztuka = 2.50;
            ser.cenaKg = 6.50;

            string wyswietl()
            {
                Console.WriteLine(
                              $"\n   " +
                              $"[1]     {chleb.nazwa} {chleb.cenaSztuka}zł\n   " +
                              $"[2]     {maslo.nazwa} {maslo.cenaSztuka}zł\n   " +
                              $"[3]     {ser.nazwa} {ser.cenaKg}kg\n   ");
                return "";
            }

            Console.WriteLine("-- Kasa sklepowa -- \n\nProszę wybrać artykuł: \n");

            int szt = 0;
            int szt2 = 0;
            int szt3 = 0;

            wybor();

            void wybor()
            {
                Console.WriteLine(wyswietl());
                var operation = Console.ReadLine();
                switch (operation)
                {
                    case "1":
                        Console.Clear();
                        Console.WriteLine("Ile sztuk?");
                        szt = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt);
                        kontynuacja();
                        break;

                    case "2":
                        Console.WriteLine("Ile sztuk?");
                        szt2 = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt2);
                        kontynuacja();
                        break;

                    case "3":
                        Console.WriteLine("Ile sztuk?");
                        szt3 = int.Parse(Console.ReadLine());
                        Console.WriteLine("wybrano {0} szt", szt3);
                        kontynuacja();
                        break;

                    default:
                        throw new Exception("Wybrałeś zla operacje\n");
                }
            }
            string kontynuacja()
            {
                Console.WriteLine("1 - dalej \n  2 - zaplac");
                int n = int.Parse(Console.ReadLine());
                switch (n)
                {
                    case 1:
                        Console.Clear();
                        wybor();
                        break;

                    case 2:
                        Console.Clear();
                        zaplac();
                        Console.ReadKey();
                        break;
                }
                return "";
            }
            void zaplac()
            {
                double total;
                double w1 = chleb.cenaSztuka * szt;
                double w2 = maslo.cenaSztuka * szt2;
                double w3 = chleb.cenaKg * szt3;
                if (szt != 0 || szt2 != 0 || szt3 != 0)
                {
                    total = w1 + w2 + w3;
                    Console.WriteLine("Lacznie: {0}", total);
                }
                else
                {
                    Console.WriteLine("blad");
                }
            }
        }
    }
}
0

@Ktos: Faktycznie, dziękuję ci bardzo! :)

1

new jest Twoim przyjacielem (i podręcznik)

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