obsługa wyjątku c#

1

Witam

Chciałem sprawdzić działanie obsługi wyjątku jednak kompilator zgłasza mi błąd odnośnie zmiennej a nie bardzo mogę zrozumieć w czym rzecz. Poniżej kod programu z błędem w linii 24.

using System;
public class Test
{
        public static void Main()
        {
                int t;
		
		Console.WriteLine("podaj cyfre");
		try {
                t = int.Parse(Console.ReadLine());
			Console.WriteLine ("jestem w try");
			}
		
		catch (FormatException)
			{
			Console.WriteLine ("jestem w catch");
			}
		
		finally 
			{
			Console.WriteLine("jestem w finally ");
			}
                
		while(t>0)
                {
        		Console.WriteLine("wartosc t " +t);
                        t--;
                }
        }
} 
1

Mamy sobie liczyć linie rozumiem? Jaki błąd zgłasza? Use of unassigned variable t?

0
Sarrus napisał(a)

Mamy sobie liczyć linie rozumiem? Jaki błąd zgłasza? Use of unassigned variable t?

Program pobiera zmienną t, potem ma przekonwertować na int w bloku instrukcji try. Jeśli zostanie podana cyfra to wyświetla t podaną ilość razy. Jeśli jednak użytkownik poda zmienną która nie da się przekonwertować powinien uruchomić przechwytywanie wyjątku. Zgłasza "error Use of unassigned variable t"

2

załóżmy, że ktoś zamiast cyfry (a raczej: liczby) poda „dupa”. wykonałyby się kolejno instrukcje:

        int t;
        Console.WriteLine("podaj cyfre");
	t = int.Parse(Console.ReadLine());
	// tu mamy wyjątek, więc skaczemy do "catch":
	Console.WriteLine("jestem w catch");
	// koniec wyjątku, skaczemy do "finally":
	Console.WriteLine("jestem w finally ");
	// koniec finally, idziemy dalej:
        while (t > 0)  // BUM! jaką wartość ma teraz t?

C# jest dość restrykcyjny, jeśli jedyne przypisanie wartości do t zawarte jest wewnątrz try, to znaczy że teoretycznie może się nie wykonać.
W twoim przypadku możesz dodać np. t = -1 wewnątrz catch, albo już na początku dać int t = -1 — w ten sposób zmienna t zawsze będzie inicjalizowana.

0

W takich wypadkach właśnie ten błąd się pojawia jak napisał Azarien. Podobnie ma się sprawa do if-ów:

int t;
if (...)
{
   t = 5;
}

Console.Writeline(t); //<- błąd bo if nie musi się wykonać i zmienna będzie nieprzypisana
0

Dziękuję wszystkim za precyzyjną pomoc :)

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