Błąd kompilacji, użycie niezainicjowanej zmiennej lokalnej.

0

Witam, nazywam się Tomek i od niedawna zajmuję się programowaniem w C# (w sumie dopiero się bawię). Ogarniając podstawy natrafiłem na przykładowe zadania (proste programiki) napisałem już wszystkie jakie były w tutorialu ale ostatniego nie umiem rozwiązać

Brzmi ono tak: Napisz program, który w zależności od wyboru użytkownika, obliczy pole koła albo jego obwód:

Przykładowe wyniki:
Wybierz co chcesz obliczyć, o-obwód, p-pole
Podaj promień koła r, np. 10.4
Twój wybór to: o
Wynik : Obwód koła o promieniu 10.4 wynosi 63.312

A to program który udało mi się napisać:

 static void Main(string[] args)
        {

            // Powitanie i informacja
            Console.WriteLine("Witaj");
            Console.WriteLine("Poniższy program w zależności od wyboru oblicza pole lub obwód koła");
            Console.WriteLine("Wybierz P-aby obliczyć pole");
            Console.WriteLine("Wybierz O-aby obliczyć obwód");
            
            //dane wejściowe oraz wybór użytkownika
           

            char x, O, P;
            x = char.Parse(Console.ReadLine());

            if (x == O)
            {
                Console.WriteLine("Wybrano policzenie obwodu koła ");
                Console.WriteLine("Prowadź promień r");
                double o, r, pi;
                r = double.Parse(Console.ReadLine());
                pi = 3.14;
                o = 2 * pi * r;

                Console.WriteLine("Obwód koła o promieniu r {0} wynosi {1}", r, o);
            }

            else
                if (x == P)
            {
                Console.WriteLine("Wybrano policzenie pola koła ");  
                Console.WriteLine("Prowadź promień r");
                double p, r, pi;
                r = double.Parse(Console.ReadLine());
                pi = 3.14;
                p = pi * r * r;
                Console.WriteLine("Pole koła o promieniu r {0} wynosi {1}", r, p);
            }
            else
                 if ((x != P) && (x != O))
                Console.WriteLine("Nie dokonano wyboru");
          
        }

A problemem są dwa błędy jakie wskazuje mi kompilator, chodzi o zmienne O i P które chcę podstawić pod x (błąd CS0165.cs ). Jak waszym zdaniem powinny wyglądać warunki if (x == P) oraz if (x == O), żeby program zadziałał prawidłowo ?
.

Pozdrawiam, świerzak Tomek.

CS0165 = Use of unassigned local variable - msm

1

Problem jest prosty. Dodatkowo kompilator napisał Ci dokładnie o co chodzi.

(błąd CS0165.cs ).

Zamiast czytać numerki (człowiekowi poważnie niewiele mówią) popatrzyłbyś na opis ;)

Use of unassigned local variable 'var'

The C# compiler does not allow the use of uninitialized variables. If the compiler detects the use of a variable that might not have been initialized, it generates CS0165.

Use new to create an instance of an object or assign a value.

The following sample generates CS0165:

// CS0165.cs
using System;

class MyClass
{
   public int i;
}

class MyClass2
{
   public static void Main(string [] args)
   {
      int i, j;
      if (args[0] == "test")
      {
         i = 0;
      }

      /*
      // to resolve, either initialize the variables when declared
      // or provide for logic to initialize them, as follows:
      else
      {
         i = 1;
      }
      */

      j = i;   // CS0165, i might be uninitialized

      MyClass x;
      x.i = 0;   // CS0165
      // use new as follows
      // MyClass x = new MyClass();
      // x.i = 0;
   }
}

Naprawdę dobra dokumentacja i opis.

   char x, O, P;
            x = char.Parse(Console.ReadLine());
 
            if (x == O) // jaką wartość ma O?
            {
                // (...)
            } else if (x == P) // jaką wartość ma P?
            {

A rozwiązanie proste, po prostu Ci chodziło o 'O' i 'P' (if (x == 'O') - jeśli x ma wartość 'O'. if (x == O) - jeśli x jest równy wartości zmiennej O).

0

Dzięki, wszystko działa, nie zrumieniałem jak myśli kompilator, teraz wiem jak dopisać mu zmienną char 'O'.

0

Nie musisz dopisywać zmiennej, chcesz po prostu porównać z wartością.
Popatrz tu:
http://ideone.com/u3qNTg

using System;

public class Test
{
	public static void Main()
	{
		char x = 'A';
		
		if (x == 'B')
		{
			Console.WriteLine("Chyba jedna nie");
		}
		else if (x == 'A')
		{
			Console.WriteLine("X faktycznie ma wartość 'A'");
		}
		
		// if (x == C) - nie ma takiej zmiennej jak C - błąd kompilacji
		// ewentualnie:
		char D = 'Z';
		if (x == D)
		{
			Console.WriteLine("Sprawdzamy czy x ma wartość 'Z' (nie żadne D - D to tylko nazwa zmiennej)");
			Console.WriteLine("No nie ma, x ciągle jest równe 'A'");
		}
		
		D = 'A';
		if (x == D)
		{
			Console.WriteLine("Sprawdzamy czy x ma wartość 'A' (nie żadne D - D to tylko nazwa zmiennej)");
			Console.WriteLine("Owszem, ma.");
		}
	}
}

Edit - jeszcze inaczej - 'A' to sposób na zapisanie wartości znaku A, samo A oznacza odwołanie się do zmiennej A.

0

Aha, czyli da się prościej, również i tej metody będę używał. Korzystna jak jest więcej opcji to ułatwia przejrzystość kodu.

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